django - Django Rest Framework:字段名称“likes”对模型“userPost”无效配置不正确
问题描述
在我的 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_one改变likes
为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
并将相关名称添加到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()
推荐阅读
- angular - 如何使用 REST 调用的结果动态初始化 CellEditor
- elasticsearch - Elasticsearch - 如何结合 bool 和 range 过滤器
- pyspark - 需要使用 Pyspark 连接 Teradata 的解决方案
- testing - 我需要帮助查找非功能性需求基准的列表吗?
- javascript - 有没有办法在 App.Module.ts 中使用 configService?
- kubernetes - 使用带有外部 IP 地址的普罗米修斯
- reactjs - 如何在 react-native 的 Modal 中显示图像数组?
- c++ - 在 C++ 中不使用关键字 new 在堆栈上创建实例
- javascript - Knex.js 用于查询作为一个查询
- python - 使用 Python pandas 读取镶木地板文件时出现“无效的起始字节”错误