Reputation: 1061
I have this serializer and model. I want to show in my API the field username of User model, but I receive this error.
AttributeError at /api/v1/client_share_requests/1/
'Profile' object has no attribute 'username'
serializers.py
class ClientShareRequestSerializer(serializers.ModelSerializer):
checked_by = serializers.SlugRelatedField(
many=True,
queryset=Profile.objects.all(),
slug_field='username'
)
class Meta:
model = ClientShareRequest
fields = ('checked_by')
models.py
class Profile(models.Model):
user = models.OneToOneField(User, related_name='profile')
class ClientShareRequest(models.Model):
checked_by = models.ManyToManyField(Profile, blank=True,
related_name='checked_by')
I try to access the User model instance like this:
checked_by = serializers.SlugRelatedField(
many=True,
queryset=Profile.objects.all(),
slug_field='user.username'
)
but I receive this error:
'Profile' object has no attribute 'user.username'
Thanks for helping. (Sorry for my English :P)
Upvotes: 0
Views: 1370
Reputation: 5357
My guess is DRF does not allow nested attribute lookups on SlugRelatedFields. Simple workaround would be to add a username property on the Profile model and use this in the serializer:
class Profile(models.Model):
user = models.OneToOneField(User, related_name='profile')
@property
def username(self):
return self.user.username
class ClientShareRequest(models.Model):
checked_by = models.ManyToManyField(Profile, blank=True,
related_name='checked_by')
class ClientShareRequestSerializer(serializers.ModelSerializer):
checked_by = serializers.SlugRelatedField(
many=True,
read_only=True,
slug_field='username'
)
class Meta:
model = ClientShareRequest
fields = ('checked_by', )
This works for reads :)
Upvotes: 1