Special case for when OneToOneField is also primary key. by matteius · Pull Request #5192 · encode/django-rest-framework (original) (raw)
Additionally, having tried to manually list all the fields on one of the smaller tables, I get the same error:
Traceback (most recent call last):
File "/Users/carl/.virtualenvs/diakonia-internal/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/Users/carl/.virtualenvs/diakonia-internal/lib/python3.7/site-packages/django/core/handlers/base.py", line 126, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/Users/carl/.virtualenvs/diakonia-internal/lib/python3.7/site-packages/django/core/handlers/base.py", line 124, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/local/Cellar/python/3.7.2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/contextlib.py", line 74, in inner
return func(*args, **kwds)
File "/Users/carl/.virtualenvs/diakonia-internal/lib/python3.7/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "/Users/carl/.virtualenvs/diakonia-internal/lib/python3.7/site-packages/rest_framework/viewsets.py", line 116, in view
return self.dispatch(request, *args, **kwargs)
File "/Users/carl/.virtualenvs/diakonia-internal/lib/python3.7/site-packages/rest_framework/views.py", line 495, in dispatch
response = self.handle_exception(exc)
File "/Users/carl/.virtualenvs/diakonia-internal/lib/python3.7/site-packages/rest_framework/views.py", line 455, in handle_exception
self.raise_uncaught_exception(exc)
File "/Users/carl/.virtualenvs/diakonia-internal/lib/python3.7/site-packages/rest_framework/views.py", line 492, in dispatch
response = handler(request, *args, **kwargs)
File "/Users/carl/.virtualenvs/diakonia-internal/lib/python3.7/site-packages/rest_framework/mixins.py", line 45, in list
return self.get_paginated_response(serializer.data)
File "/Users/carl/.virtualenvs/diakonia-internal/lib/python3.7/site-packages/rest_framework/serializers.py", line 768, in data
ret = super(ListSerializer, self).data
File "/Users/carl/.virtualenvs/diakonia-internal/lib/python3.7/site-packages/rest_framework/serializers.py", line 262, in data
self._data = self.to_representation(self.instance)
File "/Users/carl/.virtualenvs/diakonia-internal/lib/python3.7/site-packages/rest_framework/serializers.py", line 686, in to_representation
self.child.to_representation(item) for item in iterable
File "/Users/carl/.virtualenvs/diakonia-internal/lib/python3.7/site-packages/rest_framework/serializers.py", line 686, in <listcomp>
self.child.to_representation(item) for item in iterable
File "/Users/carl/.virtualenvs/diakonia-internal/lib/python3.7/site-packages/rest_framework/serializers.py", line 513, in to_representation
fields = self._readable_fields
File "/Users/carl/.virtualenvs/diakonia-internal/lib/python3.7/site-packages/django/utils/functional.py", line 37, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/Users/carl/.virtualenvs/diakonia-internal/lib/python3.7/site-packages/rest_framework/serializers.py", line 376, in _readable_fields
field for field in self.fields.values()
File "/Users/carl/.virtualenvs/diakonia-internal/lib/python3.7/site-packages/rest_framework/serializers.py", line 363, in fields
for key, value in self.get_fields().items():
File "/Users/carl/.virtualenvs/diakonia-internal/lib/python3.7/site-packages/rest_framework/serializers.py", line 1059, in get_fields
fields[field_name] = field_class(**field_kwargs)
File "/Users/carl/.virtualenvs/diakonia-internal/lib/python3.7/site-packages/rest_framework/relations.py", line 290, in __init__
assert self.view_name is not None, 'The `view_name` argument is required.'
AssertionError: The `view_name` argument is required.
and that's with a model of...
class Location(models.Model):
location_cd = models.OneToOneField(CodeValue, models.DO_NOTHING, db_column='location_cd', primary_key=True)
apache_reltn_flag = models.FloatField(editable=False, )
census_ind = models.FloatField(editable=False, blank=True, null=True)
chart_format_id = models.ForeignKey(ChartFormat, models.DO_NOTHING, blank=True, null=True, db_column='CHART_FORMAT_ID')
contributor_source_cd = models.FloatField(editable=False, blank=True, null=True)
contributor_system_cd = models.FloatField(editable=False, )
data_status_cd = models.FloatField(editable=False, )
data_status_dt_tm = models.DateField(editable=False, blank=True, null=True)
data_status_prsnl_id = models.ForeignKey(Prsnl, models.DO_NOTHING, editable=False, db_column='DATA_STATUS_PRSNL_ID')
discipline_type_cd = models.FloatField(editable=False, )
exp_lvl_cd = models.FloatField(editable=False, blank=True, null=True)
ref_lab_acct_nbr = models.CharField(editable=False, max_length=20, blank=True, null=True)
facility_accn_prefix_cd = models.FloatField(editable=False, )
icu_ind = models.FloatField(editable=False, blank=True, null=True)
location_type_cd = models.ForeignKey(CodeValue, models.DO_NOTHING, db_column='LOCATION_TYPE_CD')
organization_id = models.ForeignKey(Organization, models.DO_NOTHING, db_column='ORGANIZATION_ID')
patcare_node_ind = models.FloatField(editable=False, blank=True, null=True)
registration_ind = models.FloatField(editable=False, blank=True, null=True)
reserve_ind = models.FloatField(editable=False, )
resource_ind = models.FloatField(editable=False, blank=True, null=True)
transfer_dt_tm_ind = models.FloatField(editable=False, )
transmit_outbound_order_ind = models.FloatField(editable=False, blank=True, null=True)
# Obsolete fields (according to the DocInfo)
# view_type_cd = models.ForeignKey(CodeValue, models.DO_NOTHING, db_column='VIEW_TYPE_CD')
view_type_cd = models.FloatField(editable=False, blank=True, null=True) # Break the FK link, but see the data
# Common date boundaries for the record
beg_effective_dt_tm = models.DateField(editable=False, )
end_effective_dt_tm = models.DateField(editable=False, )
def __str__(self):
return "Location #{0}".format(self.location_cd.display)
class Meta:
managed = False
db_table = 'LOCATION'
and a serialiser of:
class LocationSerialiser(serializers.HyperlinkedModelSerializer):
class Meta:
model = Location
# fields = '__all__'
fields = ('location_cd', 'apache_reltn_flag', 'census_ind', 'chart_format_id', 'contributor_source_cd',
'contributor_system_cd', 'data_status_cd', 'data_status_dt_tm', 'data_status_prsnl_id',
'discipline_type_cd', 'exp_lvl_cd', 'ref_lab_acct_nbr', 'facility_accn_prefix_cd', 'icu_ind',
'location_type_cd', 'organization_id', 'patcare_node_ind', 'registration_ind', 'reserve_ind',
'resource_ind', 'transfer_dt_tm_ind', 'transmit_outbound_order_ind', 'view_type_cd',
'beg_effective_dt_tm', 'end_effective_dt_tm')
This makes me suspect the problem is a bit deeper on the OneToOneField as PK and not just related to adding in the PK to the default_fields.