byt*_*kie 4 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']}),
Run Code Online (Sandbox Code Playgroud)
显然我已经尝试了一点点工作和google搜索了很多,但我发现了list_filter批次的参考,但没有关于只显示该字段.最好的猜测是
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']}),
Run Code Online (Sandbox Code Playgroud)
有谁知道这样做的正确方法?
小智 7
ModelAdmin要在a中显示相关字段fieldset,必须首先在 中声明该字段readonly_fields。
Define a method that returns the desired value.
Include the method or its name in readonly_fields.
Include the method or its name in its fieldset's "fields" list.
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
Run Code Online (Sandbox Code Playgroud)
On the Change page, there will be a "Parent info" section with the object's parent's name.
在ModelAdmin类上定义一个方法,该方法返回相关字段的值,并将其包括在中list_display.
class ProductAdmin(admin.ModelAdmin):
list_display = ('name', 'level')
model = Product
def level(self, obj):
return obj.category.level
Run Code Online (Sandbox Code Playgroud)
最简单的方法是将 of 放入level方法Category中__unicode__:
class Category(models.Model):
name = models.CharField(max_length=50, default=False)
level = models.IntegerField(help_text="1, 2 ,3 or 4")
def __unicode__(self):
return u'%s [%d]' % (self.name, self.level)
Run Code Online (Sandbox Code Playgroud)
所以选择框会显示它。
| 归档时间: |
|
| 查看次数: |
3631 次 |
| 最近记录: |