Django Rest框架:字段名';喜欢';对于型号为';userPost';配置不当

Django Rest框架:字段名';喜欢';对于型号为';userPost';配置不当,django,django-models,django-rest-framework,Django,Django Models,Django Rest Framework,在我的Django Rest框架api中,我试图向我的模型UserPosts添加一个属性,该属性返回所述帖子的所有喜欢项。尽管我尽了最大的努力,我还是不断地遇到这个错误。下面是我的帖子模型: class UserPosts(models.Model): userProfile = models.ForeignKey(UserProfile, related_name="posts", on_delete=models.CASCADE) image = models.ImageFi

在我的Django Rest框架api中,我试图向我的模型UserPosts添加一个属性,该属性返回所述帖子的所有喜欢项。尽管我尽了最大的努力,我还是不断地遇到这个错误。下面是我的帖子模型:

class UserPosts(models.Model):
    userProfile = models.ForeignKey(UserProfile, related_name="posts", on_delete=models.CASCADE)
    image = models.ImageField()
    caption = models.CharField(max_length=240)

    @property
    def get_likes(self):
        from liked.models import Like
        return Like(post=self)
这是我喜欢的模型:

class Like(models.Model):
    user = models.OneToOneField(UserProfile, on_delete=models.CASCADE,)
    post = models.ForeignKey(UserPosts, on_delete=models.CASCADE)
    liked_at = models.DateTimeField()
最后是后序列化程序:

class postSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = models.UserPosts
        fields = ('userProfile', 'image', 'caption', 'likes')

谢谢。

你至少有三种方法。首先,正如@WillemVanOnsem所说,通过将
likes
更改为
like\u集

class postSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = models.UserPosts
        fields = ('userProfile', 'image', 'caption', 'like_set')
        #                                             ^^^^^
其次,将模型的属性重命名为
likes
,并修复其中的查询集

class UserPosts(models.Model):
    userProfile = models.ForeignKey(UserProfile, related_name="posts", on_delete=models.CASCADE)
    image = models.ImageField()
    caption = models.CharField(max_length=240)

    @property
    def likes(self):
    #   ^^^^^
        from liked.models import Like
        return Like.objects.filter(post=self).values() or []
        # solution you try ^^^^^^^
        return self.like_set.values() or []
        # more django way
第三,对我来说最简单、最优雅的方法是删除你的
get_likes
,并将其添加到
post
ForeignKey

class Like(models.Model):
    user = models.OneToOneField(UserProfile, on_delete=models.CASCADE,)
    post = models.ForeignKey(UserPosts, related_name='likes', on_delete=models.CASCADE)
    #                                    ^^^^^^^^^^^
    liked_at = models.DateTimeField()

后序列化程序中的
likes
替换为
like\u set
(您最好修复该命名样式)。@WillemVanOnsem非常感谢您。我没有足够的代表投票给你,否则我会。