作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Django 程序员的问题应该很简单,但目前我不知道如何解决。
我有这三个模型(我尽量简化):
class Nations(models.Model):
label = models.CharField(max_length=200)
iso2 = models.CharField(max_length=2, unique=True)
class Cities(models.Model):
label = models.CharField(max_length=200, null=True)
country_code = models.ForeignKey(Nations, to_field='iso2', on_delete=models.SET_NULL, null=True, verbose_name='Nation')
class Person(models.Model):
username = models.CharField(max_length=200, blank=False)
city = models.ForeignKey(Cities, on_delete=models.SET_NULL, null=True, blank=True)
如您所见,Person 模型仅与 Cities 模型相连。我需要做的是设置 PersonAdmin 类,以便在管理 View 中添加一个显示 Nations.label 值的列并使其可搜索。在下面的示例中,我将此字段称为 city__country_code__label,只是为了让您明白我的意思(但当然它不起作用,因为 Person 模型中没有 country_code 对象)。
class PersonAdmin(admin.ModelAdmin):
list_display = ('id', 'username', 'city', 'city__country_code__label')
ordering = ('username',)
raw_id_fields = ('city',)
search_fields = ['username', 'city__label', 'city__country_code__label']
[...]
我如何要求 Django 执行此操作?
提前致谢!
最佳答案
向您的模型管理员添加一个方法,该方法接受一个人 obj
并返回国家/地区标签。然后将方法添加到list_display
。
class PersonAdmin(admin.ModelAdmin):
def country_label(self, obj):
return obj.city.country_code.label
list_display = ('id', 'username', 'city', 'country_label')
list_select_related = ['city__country_code']
ordering = ('username',)
raw_id_fields = ('city',)
search_fields = ['username', 'city__label', 'city__country_code__label']
参见 list_display
文档以获取更多信息。
注意我使用了list_select_related
减少 SQL 查询的数量。
关于Django 管理员 : list_display/search_fields foreign key of a foreign key in admin view,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39780115/
我是一名优秀的程序员,十分优秀!