python - 在 Django Admin 中过滤一对一字段的结果
问题描述
首先,这是我试图限制的模型:
问题类:
class Question(models.Model):
title = models.CharField(
max_length = 200,
verbose_name = "Question title")
description = models.TextField(
verbose_name = "Question description")
block = models.ForeignKey(
to=Block,
null=True,
on_delete=models.SET_NULL,
verbose_name='Subject part to which this question belongs')
timestamp = models.DateTimeField(
auto_now_add=True,
verbose_name='Date at which the question was added')
包含我要限制的问题的一对一字段的海报类:
class Poster(models.Model):
title = models.CharField(
max_length = 200,
verbose_name = "The poster's title")
description = models.TextField(
verbose_name = "The poster's description")
authors = models.CharField(
max_length = 200,
verbose_name = "Authors' names")
image = models.ImageField(
upload_to = 'images',
verbose_name = 'Poster image')
block = models.ForeignKey(
to = Block,
null = True,
on_delete = models.SET_NULL,
verbose_name = 'The subject part to which the poster belongs')
associated_question = models.OneToOneField(
Question,
null=True,
blank=True,
on_delete=models.SET_NULL,
unique=True,
verbose_name='Question associated to this poster')
我要做的是限制“关联问题”字段在管理员中显示的选项。我的意思是,例如,如果我只想在管理员中显示时间戳超过特定限制的问题,我该怎么做?
非常感谢您提前。如果我错过了理解我的问题所必需的内容,请向我询问。如有必要,我很乐意提供更多信息。
解决方案
如果您想在默认情况下限制管理员列表,您可以覆盖get_queryset
和过滤查询集,如下所示:
编辑:要过滤associated_question
下拉表单字段,您可以使用formfield_for_foreignkey
class PosterAdmin(admin.ModelAdmin):
def get_queryset(self, request):
qs = super(PosterAdmin, self).get_queryset(request)
timestamp_limit = datetime.now() - datetime.timedelta(minutes=5)
return qs.filter(associated_question__timestamp__gt=timestamp_limit)
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
if db_field.name == "associated_question":
timestamp_limit = datetime.now() - datetime.timedelta(minutes=5)
kwargs["queryset"] = Question.objects.filter(timestamp__gt=timestamp_limit)
return super(PosterAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
限制问题列表
class QuestionAdmin(admin.ModelAdmin):
def get_queryset(self, request):
qs = super(QuestionAdmin, self).get_queryset(request)
timestamp_limit = datetime.now() - datetime.timedelta(minutes=5)
return qs.filter(timestamp__gt=timestamp_limit)
推荐阅读
- javascript - Pie Chart Balloon
- c# - 防止socket自动关闭连接
- python - 为什么 matplotlib 返回一个对象而不是绘制它?
- angular - 是否可以将 Angular Material 用于 Angular4 应用程序?
- python - 如何在 gensim 中手动设置 Tfidf 模型的值
- ios - 如何为我的 SexyTooltip 实例定义允许的箭头方向?
- java - Add up BigDecimals in Map by matching with keys from another Set
- python-3.x - 测试python3的互联网连接
- android - 如何使TextView下的textAlignment在Android Studio 3.1.2的属性中可见?
- c++ - 使用 dynamic_pointer_cast 时出现分段错误