Django 1.11管理员list_filter在另一个模型中包含字段 [英] Django 1.11 admin list_filter to include fields in another model
问题描述
我有一个显示所有已注册用户的Django Admin类.我想在每个用户旁边添加一列,以显示其最新的响应(这是一个调查应用程序).
I have a Django Admin class that displays all registered Users. I want to add a column next to each user that displays their latest Response (it's a survey app).
到目前为止,我尝试过的是:
What I've tried so far is:
响应模型
class Response(models.Model):
"""
A Response object is a collection of questions and answers with a
unique interview uuid.
"""
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
survey = models.ForeignKey(Survey, related_name="responses")
user = models.ForeignKey(User, null=True, blank=True)
interview_uuid = models.CharField(_(u"Interview unique identifier"),
max_length=36)
class Meta(object):
verbose_name = _('response')
verbose_name_plural = _('responses')
def Quarter(self):
msg = u"Q%d %d" %(((self.created.month-1)//3)+1, self.created.year)
return msg
Admin.py
class ResponseAdmin(admin.ModelAdmin):
list_display = ('survey', 'created', 'user', 'Quarter') **works here
class UserAdmin(admin.ModelAdmin):
list_display = ('username', 'latest_response')
list_filter = ('is_staff', 'latest_response')
def latest_response(self, obj):
(return "Quarter" from Response Model) **how do I get it to work here too?
admin.site.register(Response, ResponseAdmin)
admin.site.register(User, UserAdmin)
我的一些尝试导致以下错误:
A few of my attempts resulted in the following error:
FieldError: Cannot resolve keyword 'Quarter' into field. Choices are: answers, created, id, interview_uuid, survey, survey_id, updated, user, user_id
所以我可以看到问题是UserAdmin由于某种原因没有从响应模型中获取季度"字段.当我将 def Quarter(self)更改为 __ str __(self)时,它在UserAdmin中显示为所需,但随后出现过滤问题.
So I can see the issue is that UserAdmin isn't getting the Quarter field from the Response Model for some reason. When I change def Quarter(self) to __str__(self), it displays as I want in the UserAdmin, but then I have an issue with filtering.
在ResponseAdmin类下,Quarter按我的要求工作.我也该如何使用UserAdmin中的Quarter字段?
Under the ResponseAdmin class, Quarter works as I want it. How can I use the Quarter field in UserAdmin as well?
推荐答案
def latest_response(self, obj):
latest_resp = (
Response.objects
.filter(user=obj)
.order_by('-created')
.first()
)
if latest_resp is not None:
return latest_resp.Quarter()
这篇关于Django 1.11管理员list_filter在另一个模型中包含字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!