Python 从另一个模型Django添加字段
我有以下模型(一个例子,不是一个): 在我的admin.py中,我有:Python 从另一个模型Django添加字段,python,django,admin,Python,Django,Admin,我有以下模型(一个例子,不是一个): 在我的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, Mo
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代码中的代码关系。我怎样才能做到这一点
对不起,我的英语
Thx很多,
Antonio。您的评论表明,您真正感兴趣的不是列表显示,而是编辑。为此,应使用内联表单:
class ModelAInline(admin.StackedInline):
model = ModelA
class ModelBAdmin(admin.ModelAdmin):
list_display = ('name',)
inlines = [ModelAInline]
admin.site.register(ModelA, ModelAAdmin)
现在,在编辑表单上,每个ModelA都有一个ModelB列表,您可以在下面直接进行编辑
(请注意,您可能应该使用OneToOneField,而不是使用unique=True的ForeignKey。)您可以通过以下方式在列表显示中定义自定义项:
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的适用代码列表。多亏了@vartec、@DanielRoseman和@Tisho。 最后,根据你的建议,我已经做了下一步(我认为不,这是非常有效的…但其他方法会产生错误…) SubvencionCadmin相当于“ModelB”和“Subvencion”相当于“ModelA”
非常感谢ModelB没有来自ModelA的单个相关代码,因为它是一对多关系-将有许多相关代码。您想显示什么?我想显示ModelA中的代码,因为每个ModelA都必须有一个ModelB,但是如果我想从Adminsite中编辑ModelB,很难找到它。是的,每个ModelA都必须有一个ModelB,但这意味着每个ModelB都有多个ModelA。同样,你想显示什么?@antonio:那么,当一个ModelB实例被10个ModelA实例引用时,你会显示什么?@DanielRoseman每个ModelB只有一个ModelA,因为我在foreignkey中写了“unique=True”。问题是,如果我想编辑一个ModelB,很难找到它。如果他们帮助了你,你也可以对答案进行投票(似乎是这样),然后接受一个。@Tisho我不能对答案进行投票,我只有10个声誉。。。投票的最低限度是15票。
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')
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)