我想在对象的管理页面中显示产品所属类别的级别。从下面显示的不重要的字段中剪了很多。
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'
任何人都知道正确的方法吗?
答案 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)
要在 ModelAdmin
的 fieldset
中显示相关字段,必须先在 readonly_fields
中声明该字段。
定义一个返回所需值的方法。
在 readonly_fields
中包含方法或其名称。
将方法或其名称包含在其 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
在“更改”页面上,将有一个“父信息”部分,其中包含对象的父名称。