gpt4 book ai didi

django - 如何显示外键子项的 Django Admin 更改 ListView ?

转载 作者:行者123 更新时间:2023-12-01 17:43:33 25 4
gpt4 key购买 nike

我正在开发一个应用程序,其模型层次结构为“营销事件”>“类别”>“帐户”。理想情况下,我希望用户能够单击事件管理 ListView 中的链接并转到“/admin/myapp/campaign/2/accounts/”之类的 URL,该 URL 将显示 Django 管理 View ,其中包含所有方便的 ChangeList 设施,但经过过滤后仅显示指定营销事件中类别中的帐户(即 Account.object.filter(category__campaign__id = 2))。 (请注意,类别本身我很高兴成为此帐户 ListView 上的“过滤器”)。

我似乎找不到任何引用来模仿许多其他框架中常见的 item-click-goes-to-list-of-foreign-key-children 方法。

这可能吗? django 范式中是否有“更好”的方法?

感谢您的帮助!

最佳答案

这是一个有趣的问题,所以我制作了一个示例应用程序来解决这个问题。

# models.py
from django.db import models

class Campaign(models.Model):
name = models.CharField(max_length=20)

def __unicode__(self):
return unicode(self.name)

class Category(models.Model):
campaign = models.ForeignKey(Campaign)
name = models.CharField(max_length=20)

def __unicode__(self):
return unicode(self.name)

class Account(models.Model):
category = models.ForeignKey(Category)
name = models.CharField(max_length=20)

def __unicode__(self):
return unicode(self.name)

# admin.py
from django.contrib import admin
from models import Campaign, Category, Account

class CampaignAdmin(admin.ModelAdmin):
list_display = ('name', 'related_accounts', )

def related_accounts(self, obj):
from django.core import urlresolvers
url = urlresolvers.reverse("admin:<yourapp>_account_changelist")
lookup = u"category__campaign__exact"
text = u"View Accounts"
return u"<a href='%s?%s=%d'>%s</a>" % (url, lookup, obj.pk, text)
related_accounts.allow_tags = True
admin.site.register(Campaign, CampaignAdmin)
admin.site.register(Category)

class AccountAdmin(admin.ModelAdmin):
list_display = ('category', 'name')
list_filter = ('category__campaign',)
admin.site.register(Account, AccountAdmin)

您需要替换为 Account ModelAdmin 所在应用的名称。

注意:自 Django 1.2.4、Django 1.1.3 和 Django 1.3 beta 1 起,AccountAdmin 上的 list_filter 是必需的,它引入了通过管理中的 URL 参数进行任意过滤的保护。

关于django - 如何显示外键子项的 Django Admin 更改 ListView ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5662359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com