Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从另一个模型Django添加字段_Python_Django_Admin - Fatal编程技术网

Python 从另一个模型Django添加字段

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

我有以下模型(一个例子,不是一个):

在我的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代码中的代码关系。我怎样才能做到这一点

对不起,我的英语

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)