python - 根据另一个查询集 django 的结果检查一个查询集的结果
问题描述
在我的 django 应用程序中,我有三个模型,人物、评论和文件。
class People(models.Model):
firstname = models.charField(max_length=20)
lastname = models.charField(max_length=20)
class Reviews(models.Model):
STATUSES = (
('pending', 'Pending'),
('approved', 'Approved'),
('rejected', 'Rejected')
)
person = models.OneToOneField(People, on_delete=models.CASCADE, primary_key=True)
status = models.CharField(max_length=10, choices=STATUSES, default='pending')
comment = models.TextField()
class File(models.Model):
owner = models.OneToOneField(Reviews, on_delete=models.CASCADE, primary_key=True)
comment = models.TextField()
issue_date = models.DateField(auto_now_add=True)
OneToOneField
在 File 模型上看到了吗?我需要能够根据两个条件过滤该下拉列表。
- 它只需要显示
Reviews
模型中状态为已批准的记录。Reviews.objects.filter(status="approved")
- 显示的结果不得已存在于
File
模型的记录中。File.objects.all()
而且,在创建 File 模型的实例时,当从下拉列表中选择一个值时,如何自动comment field
使用 Review 模型的评论字段中的值填充?
我不太明白。
解决方案
我想你可以这样尝试:
Reviews.objects.filter(status="approved", file__isnull=True)
这里由于OneToOne关系,所有评论对象都有一个file
返回File
对象的属性。我正在使用isnull检查它是否为空。
更新
恕我直言,我不明白为什么评论的值应该在数据库中存储两次。如果你有评论值Review
,那么你可以像这样访问它:
file = File.objects.first()
comment = file.review.comment
现在,当涉及到在创建文件实例时在管理站点中显示它时,如果不使用 Javascript 就不可能做到这一点。但另一种骇人听闻的方法是在评论下拉列表中显示该值。但为此,您需要覆盖__str__
Review Model 的方法。像这样:
class Reviews(models.Model):
STATUSES = (
('pending', 'Pending'),
('approved', 'Approved'),
('rejected', 'Rejected')
)
person = models.OneToOneField(People, on_delete=models.CASCADE, primary_key=True)
status = models.CharField(max_length=10, choices=STATUSES, default='pending')
comment = models.TextField()
def __str__(self):
return "{}: {}".format(self.status, self.comment)
但是,如果创建了一个文件实例,或者如果您想在管理站点的文件列表中显示评论,您可以这样做:
from django.contrib import admin
class FileAdmin(admin.ModelAdmin):
list_display = ('issue_date', 'comment')
def comment(self, obj):
return obj.review.comment
admin.site.register(File, FileAdmin)
推荐阅读
- microsoft-graph-api - 使所有文件也可以在本地硬盘上使用
- c - C中的二叉搜索树实现将根作为参考
- python - 当我为多图图中的不同子图设置不同的 xticklabels 时,只使用最后一个
- c++ - C++ Visual Studio 代码:调试以 NullReferenceException 终止:对象引用未设置为对象的实例
- python - 为了使用 Python 登录网站,我应该使用哪些定位器?
- office365 - 基于发件人“姓名”而不是地址的交换规则?
- python - 每隔 n 个字符向后迭代拆分一个 Python 字符串
- c++ - MS Visual Studio 错误消息 E0147 中的 C++ 头文件
- javascript - Jquery在没有ID的Textarea上自动填充
- html - 在 xpath Selenium 中使用 .format() 的 NoSuchElement 异常