我有以下模型(一个例子,不是真的一个):
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)
在我的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)
我会做类似的事情:
class ModelBAdmin(admin.ModelAdmin):
list_display = ('name', 'code')
代码必须是ModelA代码的代码关系。我怎么能做到这一点?
P.D。:对不起我的英文......
很多, 安东尼奥。
答案 0 :(得分:5)
您的评论显示,实际上您感兴趣的不是列表显示,而是编辑。为此,您应该使用内联表单:
class ModelAInline(admin.StackedInline):
model = ModelA
class ModelBAdmin(admin.ModelAdmin):
list_display = ('name',)
inlines = [ModelAInline]
admin.site.register(ModelA, ModelAAdmin)
现在,在编辑表单上,每个ModelA都有一个ModelBs列表,您可以在其下直接编辑。
(请注意,不应使用unique = True的ForeignKey,而应使用OneToOneField。)
答案 1 :(得分:3)
您可以用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')
由于一个modelB可以附加到多个modelA项目,因此您可能需要返回指定ModelB的适用代码列表。
答案 2 :(得分:3)
感谢@vartec,@ DanielRoseman和@Tisho。 最后,根据你的建议我做了下一个(我认为不是很有效......但其他方法会引发错误......)
class SubvencionCAAdmin(admin.ModelAdmin):
search_fields = ['nombre', 'tipo', 'resumen']
def Subvencion_Code(self):
lista_subvenciones = Subvencion.objects.all()
for subvencion in lista_subvenciones :
if (self.nombre == subvencion.CA.nombre):
return subvencion.codigo
list_display = ('nombre', Subvencion_Code)
SubvencionCAAdmin相当于“ModelB”和“Subvencion”相当于“ModelA”。
非常感谢