Django休息框架: field name 'likes' is not valid for model 'userPost' improperlyConfigured

标签 django django-models django-rest-framework

在我的 Django Rest Framework 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 所说,通过 many_to_onelikes 更改为 like_set

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 并添加 related_namepost 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()

关于Django休息框架: field name 'likes' is not valid for model 'userPost' improperlyConfigured,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50685103/

相关文章:

python - ListView中的Django GET表单和上下文修改

python - 如何用python/django实现restful webservice

django - 为什么 django 强制所有模型类都在 models.py 中?

Django 删除多个 m2m 关系而不循环

python - DRF 中的几个查询参数 URL

Django rest 框架 ModelSerializer 运行太慢

python - zope.testbrowser 的代理设置

Django:如何获取当前用户的组ID

python - "Add a related_name argument to the definition for ' XXX'.的自动解决方案?

django - [ {"non_field_errors": ["Expected a list of items."]}] when saving data in Django Rest with MongoDB