Django Rest框架:字段名';喜欢';对于型号为';userPost';配置不当
在我的Django Rest框架api中,我试图向我的模型UserPosts添加一个属性,该属性返回所述帖子的所有喜欢项。尽管我尽了最大的努力,我还是不断地遇到这个错误。下面是我的帖子模型: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
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非常感谢您。我没有足够的代表投票给你,否则我会。