Django 1.11管理员list_filter在另一个模型中包含字段 [英] Django 1.11 admin list_filter to include fields in another model

查看:197
本文介绍了Django 1.11管理员list_filter在另一个模型中包含字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个显示所有已注册用户的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆