0

我有这个序列化程序和模型。我想在我的API中显示用户名用户模型,但我收到此错误。Django Rest框架slug_field错误

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') 

我试图访问用户模型实例是这样的:

checked_by = serializers.SlugRelatedField(
     many=True, 
     queryset=Profile.objects.all(), 
     slug_field='user.username' 
    ) 

但我收到此错误:

'Profile' object has no attribute 'user.username'

感谢您的帮助。 (对不起,我的英文:P)

+1

尝试'user__username'。 –

+0

@RahulGupta不起作用''Profile'对象没有属性'user__username'' – FACode

回答

0

我的猜测是DRF不允许在SlugRelatedField上嵌套属性查找。简单的解决办法是在串行的剖面模型添加用户名属性,并使用此:

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',) 

这适用于读取:)