从另一个模型添加字段的Django
我有后续型号(例如,没有真正一个):从另一个模型添加字段的Django
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代码的代码关系。我如何做到这一点?
Pd积:对不起,我的英语...
THX了很多, 安东尼奥。
您可以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的适用代码的列表。
非常感谢,非常有用。 – antonio 2012-07-31 17:20:09
您的评论显示,实际上您感兴趣的不是列表显示,而是编辑。对于您应该使用内联形式:
class ModelAInline(admin.StackedInline):
model = ModelA
class ModelBAdmin(admin.ModelAdmin):
list_display = ('name',)
inlines = [ModelAInline]
admin.site.register(ModelA, ModelAAdmin)
现在,编辑表单,每个MODELA具有ModelBs其下您可以编辑直接出现的列表。
(请注意,而不是使用具有独特= True,则应该使用一个OneToOneField一个ForeignKey)
非常感谢,非常有用。 – antonio 2012-07-31 17:20:01
感谢@vartec,@DanielRoseman和@Tisho。 最后,您suggesions我已经做下一个(我认为不,它的效率非常高。但其他方法引发错误...)
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“。
非常感谢
ModelB没有从MODELA一个相关的代码,因为它是一个一对多的关系 - 会有很多相关的代码。你想展示什么? – 2012-07-31 16:06:40
我想显示来自ModelA的代码,因为每个ModelA都必须有ModelB,但是如果我想从Adminsite编辑ModelB并不容易找到它。 – antonio 2012-07-31 16:15:11
是的,每个ModelA都必须有一个ModelB,但这意味着每个ModelB都有*许多* ModelAs。再次,你想展示什么? – 2012-07-31 16:19:15