我的项目包含要处理然后进行分类的项目,因此我有两个主要模型:项目和分类,如下所示:
class Item(models.Model):
seq_prod = models.IntegerField(primary_key=True)
value = models.DecimalField(decimal_places=4, max_digits=20)
class Classification(models.Model):
item = models.ForeignKey(Item, db_index=True, on_delete=models.CASCADE)
rule = models.ForeignKey(Rule, null=True, blank=True, on_delete=models.CASCADE)
atribute = models.ForeignKey(Atribute, on_delete=models.CASCADE)
valid_clas = models.BooleanField(default=True)
dat_emission = models.DateField()
模型规则和属性对问题并不重要。
至于管理部分,我们有:
class ClassificationInline(admin.TabularInline):
model = Classification
list_display = ('rule', 'atribute', 'valid_clas')
@admin.register(Item)
class ItemAdmin(admin.ModelAdmin):
list_display = ('desc', 'value',)
inlines = [
ClassificationInline,
]
请注意,在分类模型中我没有指定主键字段,因此Django创建了一个id列。
在ClassificationInline的列表显示中,我们只有“规则”,“属性”和“ valid_clas”,请注意,既没有“ id”也没有“ dat_emission”。但是,Django界面中会显示“ dat_emission”列,而不会显示“ id”列。
不仅应该显示在list_display上指定的字段?如何删除“ dat_emission”?
答案 0 :(得分:1)
在您的内联课程中使用exclude
class ClassificationInline(admin.TabularInline):
model = Classification
exclude = ('valid_clas', 'dat_emission', )
正如我在Django源代码中看到的那样,list_display
类没有TabularInline
属性,如果我错了,请纠正我。
答案 1 :(得分:0)
由于@weAreStarDust发布了list_display
对于Inlines不起作用,因此我需要在排除对象中添加dat_emission
。除此之外,还需要以下代码:
def get_readonly_fields(self, request, obj=None):
result = list(set(
[field.name for field in self.opts.local_fields] +
[field.name for field in self.opts.local_many_to_many]
))
result.remove('id')
result.remove('dat_emission')
return result
内联的最终代码是:
class ClassificationInline(admin.TabularInline):
model = Classification
exclude = ('dat_emission', )
ordering = ('rule',)
can_delete = False
def has_add_permission(self, request):
return False
def get_readonly_fields(self, request, obj=None):
result = list(set(
[field.name for field in self.opts.local_fields] +
[field.name for field in self.opts.local_many_to_many]
))
result.remove('id')
result.remove('dat_emissao')
return result