0

Ich habe diesen Serializer und Modell. Ich möchte in meiner API das Feld Benutzername von Benutzer Modell zeigen, aber ich erhalte diesen Fehler.Django Rest Framework slug_field Fehler

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

Ich versuche, die User-Modell weise wie folgt aus zuzugreifen:

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

aber ich erhalte diesen Fehler:

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

Danke für die Hilfe. (Entschuldigung für mein Englisch: P)

+1

Versuchen 'user__username'. –

+0

@RahulGupta funktioniert nicht "Profil" -Objekt hat kein Attribut "user__username" – FACode

Antwort

0

Meine Vermutung ist, DRF erlaubt keine geschachtelten Attribut-Lookups auf SlugRelatedFields. Einfache Abhilfe wäre eine username-Eigenschaft auf dem Profil-Modell hinzufügen und diese in dem 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',) 

Dies funktioniert für liest :)

Verwandte Themen