drf-nested-routers
drf-nested-routers copied to clipboard
NestedHyperlinkedIdentityField add parameter null for return None if attribute not found in object
Model
class Person(models.Model):
child = models.ForeignKey('Person', on_delete=models.SET_NULL, null=True)
Serializer
class PersonSerializer(NestedHyperlinkedModelSerializer):
child = NestedHyperlinkedIdentityField(
view_name='person-detail',
parent_lookup_kwargs={
'pk': 'child__pk',
},
)
class Meta:
model = Person
fields = '__all__'
I want child is None if child object is None, instead of raise AttributeError: 'NoneType' object has no attribute 'pk'
There is no problem when tested as below. Give me more information.
serializer
class AddressSerializer(NestedHyperlinkedModelSerializer):
user = NestedHyperlinkedIdentityField(
view_name='user-detail',
parent_lookup_kwargs={
'user_pk': 'user__pk',
},
)
class Meta:
model = Address
fields = '__all__'
model
class Address(models.Model):
id = models.BigAutoField(primary_key=True)
user = models.ForeignKey(
User, on_delete=models.SET_NULL, related_name='addresses', null=True)
view
class AddressViewSet(viewsets.ModelViewSet):
serializer_class = AddressSerializer
def get_queryset(self):
return Address.objects.filter(user=self.kwargs['user_pk'])
url
domains_router = routers.NestedSimpleRouter(router, r'users', lookup='user', trailing_slash=False)
domains_router.register(r'addresses', AddressViewSet, basename='user-address')