0

私はこのシリアライザとモデルを持っています。私は私のAPIにフィールドのユーザー名ユーザーモデルを表示したいが、このエラーが表示されます。私はこのようなユーザー・モデルのインスタンスにアクセスしようDjango Rest Framework 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はSlugRelatedFieldsのネストされた属性の参照を許可していません。簡単な回避策は、Profileモデルにユーザ名プロパティを追加し、シリアライザでこれを使用することです:

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

これは:)

関連する問題