python - 在视图中使用两个不同的模型返回一个新创建的列表,尚未称为 Querylist,带有 For 循环
问题描述
我正在尝试创建以下视图:
class FeedAPI(ObjectMultipleModelAPIView):
#lookup_url_kwarg = 'id'
def get_querylist(self, *args, **kwargs):
id = self.kwargs['id']
props = Profile.objects.filter(id=id)
followers = Profile.filter(followers.includes(props))
querylist = [
{'queryset': Profile.objects.filter(followers), 'serializer_class': ProfileSerializer},
{'queryset': Post.objects.all(), 'serializer_class': PostSerializer},
]
feedPosts= []
for x in followers:
feedPosts = Posts.objects.filter(Source_id=Post.sourceID)
return Response(props, feedPosts, status=status.HTTP_200_OK)
但是我得到了type object 'Profile' has no attribute 'filter'
根据堆栈溢出的错误,因为我没有在我的 def get_query 列表中返回查询列表。所以,我想知道如何才能返回具有与个人资料的关注者相关联的相同 sourceID 的 Post ID。我的模型是 Source、Profile 和 Post。Profile 和 Post 具有 sourceID ForeignKeys。
轮廓模型
class Profile(models.Model):
user = AutoOneToOneField(User, default=True, on_delete=models.CASCADE)
sourceID = models.ForeignKey('Source', on_delete=models.CASCADE, related_name='+', blank=True, null=True)
followers = models.ForeignKey( 'Source', on_delete=models.CASCADE, related_name='+', default='', blank=True, null=True)
following = models.ForeignKey('Source', on_delete=models.CASCADE, related_name='+', default='', blank=True, null=True)
后模型
class Post(models.Model):
sourceID = models.ForeignKey('Source', blank=True, on_delete=models.CASCADE, related_name='+', null=True)
image = models.ImageField(
"Post Picture", upload_to='post_pics', blank=True, null=True)
title = models.CharField(max_length=50)
源模型
class Source(models.Model):
profile = models.ForeignKey('Profile', on_delete=models.CASCADE, null=True, blank=True, related_name='+')
def __str__(self):
return str(self.id)
更新
仍然没有成功,仍然是同样的错误。但是,我尝试在 for 语句中将 feedPosts 设为一个列表:feedPosts = list(Posts.objects.filter(Source_id=Post.sourceID))
然后返回 feedPosts,但我没有成功。
更新 #2
我接受了 Michal 的建议并将我的追随者更改为followers = [f.pk for f in Profile.objects.filter(followers__includes=props)]
但我现在收到错误消息:'Cannot use QuerySet for "Profile": Use a QuerySet for "Source"。ValueError: Cannot use Queryset for "": Use a Queryset for ""但我看不出解决方案是如何翻译的。我的查询列表的目的只是引入多个模型。如果有人对此有解决方案,或者有更好的建议来实现我的目标,请教我。
解决方案
Profile
确实没有filter
方法,除非您自己定义它。你真正需要的是objects
经理。之后,您可以对数据做任何您想做的事情。
根据文档,您需要从get_querylist
方法中返回字典列表,而不是 HttpResponse。那将是你的querylist
变量。
要整理filter
事物并获取 ID 列表,请尝试以下操作:
followers = [f.pk for f in Profile.objects.filter(followers__includes=props)]
最后一件事。您的followers
字段是 a ForeignKey
,它指向另一件事。ManyToManyField
为此使用 a 。
推荐阅读
- javascript - 我如何默认隐藏侧边栏?
- excel - 有没有办法将图像存储在 .xlam 文件中?
- mongodb - 使用引用的 id 作为主要 id
- jestjs - 没有找到测试用例 Jest
- excel - 是否有一个excel公式可以用来将一个单元格中的字符串中的所有蓝色字体数字加到另一个单元格中?
- javascript - 在 NodeJS 中加载错误的 Javascript 文件
- angular - 在 Ionic 4(Angular 和 Cordova)应用程序(加上 Firebase 身份验证)上访问 iOS/Android 上的 Google API
- php - 连接到数据库的PHP代码未运行
- ios - 使用麦克风的音频录制屏幕视频
- amazon-web-services - AWS Application Load Balancer 究竟如何执行运行状况检查?