Nazwa błędu: Nazwa pola user_username Nie jest poprawna dla modelu {X1}}

Buduję widok z profilu edycji.

Oto mój {x0}}

class ProfileEditAPIView(DestroyModelMixin, UpdateModelMixin, generics.RetrieveAPIView):
    serializer_class = ProfileEditSerializer

    def get_queryset(self):
        logged_in_user = User.objects.filter(username=self.request.user.username)
        return logged_in_user

    def get_object(self):
        queryset = self.get_queryset()
        obj = get_object_or_404(queryset)
        return obj.profile

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)

    def delete(self, request, *args, **kwargs):
        return self.destroy(request, *args, **kwargs)

Mogę poprawnie dostać użytkownika_id, ale w jakiś sposób nie mogę uzyskać dostępu do swojego pola użytkownika

To jest serializers.py

class ProfileEditSerializer(serializers.ModelSerializer):
    class Meta:
        model = Profile
        fields = (
            'user_username', <<<
            'title',
            'gender',
            'birth',
            'height',
            'height_in_ft',
            'profile_img',
        )

models.py

class Profile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL)
    title = models.TextField(max_length=155, blank=True)
    gender = models.CharField(max_length=10, choices=GENDER_CHOICES, default='u') # Recommend Factor
    location = models.CharField(max_length=40, choices=LOCATION_CHOICES, default='ud') # Recommend Factor
    birth = models.DateField(default='1992-07-23', blank=True, null=True) # Recommend Factor
    height = models.CharField(max_length=5, default='undefined')
    height_in_ft = models.BooleanField(default=True)
    profile_img = models.ImageField(
        upload_to=upload_location,
        null=True,
        blank=True)

Dlaczego nie możemy uzyskać dostępu do nazwy użytkownika? A jak możemy to rozwiązać?

Dzięki

1
hellofanengineer 30 wrzesień 2017, 07:28

2 odpowiedzi

Najlepsza odpowiedź

Możesz uzyskać model username z User za pomocą w ten sposób.

class ProfileEditSerializer(serializers.ModelSerializer):
    username = serializers.CharField(read_only=True, source="user.username")

    class Meta:
        model = Profile
        fields = (
            'username',
            'title',
            . . . .
        )
2
Astik Anand 30 wrzesień 2017, 05:49

Spróbuj zadzwonić do nazwy użytkownika jak sposób, w jaki jest oglądany w modelu modelu I.E.

Zmiana:

        fields = (
        'user_username', <<<
        'title',
        'gender',
        'birth',
        'height',
        'height_in_ft',
        'profile_img',
    )

Do:

        fields = (
        'user', 
        'title',
        'gender',
        'birth',
        'height',
        'height_in_ft',
        'profile_img',
    )

Ale jeśli chcesz, aby pojawia się jako nazwa użytkownika w odpowiedzi JSON, użyj:

class ProfileEditSerializer(serializers.ModelSerializer):
   username = serializers.CharField(source='user')


class Meta:
    model = Profile
    fields = (
        'username', <<<
        'title',
        'gender',
        'birth',
        'height',
        'height_in_ft',
        'profile_img',
    )
0
Stevemats 22 styczeń 2020, 07:45