ant*_*nio 2 python django admin
我有以下模型(一个例子,不是一个真正的例子):
class ModelB(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class ModelA(models.Model):
code = models.CharField(max_length=50, unique=True, help_text="Code unique")
foreignkey = models.ForeignKey(ModelB, unique=True)
Run Code Online (Sandbox Code Playgroud)
在我的admin.py中,我有:
class ModelBAdmin(admin.ModelAdmin):
list_display = ('name',)
class ModelAAdmin(admin.ModelAdmin):
list_display = ('code', 'foreignkey')
admin.site.register(ModelA, ModelAAdmin)
admin.site.register(ModelB, ModelBAdmin)
Run Code Online (Sandbox Code Playgroud)
我会做类似的事情:
class ModelBAdmin(admin.ModelAdmin):
list_display = ('name', 'code')
Run Code Online (Sandbox Code Playgroud)
该代码必须是来自ModelA代码的代码关系。我该怎么做?
PD:对不起,我的英语...
非常感谢,安东尼奥。
您的评论表明,您真正感兴趣的根本不是列表显示,而是编辑。为此,您应该使用内联表格:
class ModelAInline(admin.StackedInline):
model = ModelA
class ModelBAdmin(admin.ModelAdmin):
list_display = ('name',)
inlines = [ModelAInline]
admin.site.register(ModelA, ModelAAdmin)
Run Code Online (Sandbox Code Playgroud)
现在,在编辑表单上,每个ModelA都有一个ModelB列表,您可以在下面直接进行编辑。
(请注意,您可能不应该使用OneToOneField来代替使用unique = True的ForeignKey。)
您可以通过以下方式定义自定义项目list_display:
class ModelBAdmin(admin.ModelAdmin):
def modelA_Codes(self, inst):
return ','.join([b.code for b in inst.modela_set.all()])
list_display = ('name', 'modelA_Codes')
Run Code Online (Sandbox Code Playgroud)
由于一个 modelB 可以附加到多个 modelA 项,因此您可能需要返回指定 ModelB 的适用代码列表。
| 归档时间: |
|
| 查看次数: |
2588 次 |
| 最近记录: |