如何在django管理页面中显示外键的属性

时间:2011-08-10 10:03:53

标签: django model django-admin

我想在对象的管理页面中显示产品所属类别的级别。从下面显示的不重要的字段中剪了很多。

class Category(models.Model):
    name = models.CharField(max_length=50, default=False)
    level = models.IntegerField(help_text="1, 2 ,3 or 4")

class Product(models.Model):
    category = models.ForeignKey(Category)
    name = models.CharField(max_length=100)


    prepopulated_fields = {'slug': ('name',)}
    fieldsets = [
        ('Product Info',{'fields': ['name', 'slug','partno','description']}),
        ('Categorisation',{'fields': ['brand','category']}),
显然我已经尝试了一点点工作和google了很多,但我发现了list_filter批次的参考,但没有关于只显示该字段。 最好的猜测是

'category__level'

任何人都知道正确的方法吗?

4 个答案:

答案 0 :(得分:6)

在ModelAdmin类上定义一个方法,该方法返回相关字段的值,并将其包含在list_display中。

class ProductAdmin(admin.ModelAdmin):
    list_display = ('name', 'level')
    model = Product

    def level(self, obj):
        return obj.category.level

答案 1 :(得分:2)

在您的admin.py文件中

class ProductAdmin(admin.ModelAdmin):
    list_display = ('name', 'category__level', 'category')

admin.site.register(Product, ProductAdmin)

试试这个.............

答案 2 :(得分:1)

最简单的方法是将level的{​​{1}}放入Category方法:

__unicode__

所以选择框会显示它。

答案 3 :(得分:1)

要在 ModelAdminfieldset 中显示相关字段,必须先在 readonly_fields 中声明该字段。

  1. 定义一个返回所需值的方法。

  2. readonly_fields 中包含方法或其名称。

  3. 将方法或其名称包含在其 fieldset"fields" 列表中。

from django.contrib import admin
from .models import MyModel

@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    readonly_fields = ['get_parent_name']  # Don't forget this!
    fieldsets = [('Parent info', {'fields': ['get_parent_name']} )]
    
    @admin.display(description='Parent')
    def get_parent_name(self, obj):
        return obj.parent.name

在“更改”页面上,将有一个“父信息”部分,其中包含对象的父名称。