Сериализаторы - Django REST framework (AttributeError: Получил AttributeError при попытке получить значение для поля `user` на сериализаторе) - PullRequest
0 голосов
/ 08 октября 2018

AttributeError: Получил AttributeError при попытке получить значение для поля user на сериализаторе UserKeywordSerializer.Поле сериализатора может иметь неверное имя и не соответствовать ни одному атрибуту или ключу в экземпляре QuerySet.

models.py

class Keyword(models.Model):
    name=models.CharField(max_length=500,unique=True)
    image = models.ImageField(upload_to='keywords/', blank=True, null=True)
    mood=models.ManyToManyField(Mood,blank=True)
    def __str__(self):
        return str(self.name)

class UserKeyword(models.Model):
    keywords=models.ManyToManyField(Keyword)
    count=models.IntegerField(blank=True,null=True,default=0)
    user=models.ForeignKey(User,on_delete=models.CASCADE)
    def __str__(self):
        return str(self.id)

сериализатор.py

class KeywordsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Keyword
        fields ='__all__'

class UserKeywordSerializer(serializers.ModelSerializer):
    keywords = KeywordsSerializer( read_only=True,many=True)

    class Meta:
        model = UserKeyword
        fields = '__all__'

views.py

top_keywords=UserKeyword.objects.filter(user_id=request.user.id).select_related().order_by('-count')
user_serializer=UserKeywordSerializer(top_keywords).data
print(user_serializer)

1 Ответ

0 голосов
/ 08 октября 2018
top_keywords=UserKeyword.objects.filter(user_id=request.user.id).select_related().order_by('-count')

user_serializer=UserKeywordSerializer(top_keywords, many=True).data

top_keywords - это набор запросов, поэтому вы должны добавить many=True в сериализатор, см. Работа с несколькими объектами .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...