如何解决“字段名”是不是在Django的admin.py定义名称

问题描述 投票:0回答:1

我工作的一个Django应用程序,我有一个会员模型,并呼吁审查另一种模式。

members模型

class Members(models.Model):
  TITLES = (('chairman', 'Chairman'), ('secretary', 'Secretary'),)
  user = models.OneToOneField(User, on_delete=models.CASCADE)
  title = models.CharField(max_length=10, choices=TITLES, default='secretary')
  active = BooleanField(default=False)

reviews模型

class Reviews(models.Model):
  chairman = models.ForeignKey(Members, related_name='chairs', on_delete=models.PROTECT)
  secretary = models.ForeignKey(Members, related_name='secretaries', on_delete=models.PROTECT)
  review = models.TextField()

这可能有几个主席和秘书,但外键下拉,对评价模型,我想只显示谁是最活跃者(即有活动字段设置为True)。我曾尝试通过在我admin.py下面以实现...

class ReviewsAdmin(admin.ModelAdmin):
  ...
  def formfield_for_foreignkey(self, db_field, request, **kwargs):
    if db_field.name == "chairman":
      kwargs["queryset"] = Members.objects.filter(title=='chairman', active==True)
    elif db_field.name = "secretary":
      kwargs["queryset"] = Members.objects.filter(title=='secretary', active==True)
    return super().formfield_for_foreignkey(db_field, request, **kwargs)

admin.site.register(Reviews, ReviewsAdmin)

我发现了错误,name 'title' is not defined左右,我正在做的过滤器。这里有什么问题?

django django-admin
1个回答
1
投票

只能使用“=”的查询中。

if db_field.name == "chairman":
    kwargs["queryset"] = Members.objects.filter(title='chairman', active=True)
elif db_field.name = "secretary":
    kwargs["queryset"] = Members.objects.filter(title='secretary', active=True)
© www.soinside.com 2019 - 2024. All rights reserved.