【问题标题】:Django Admin - Include field of a model A when adding a record of model BDjango Admin - 添加模型 B 的记录时包含模型 A 的字段
【发布时间】:2020-11-19 13:40:34
【问题描述】:

我正在处理 Django (1.11) 中的遗留代码

我有一个模型 A,具有以下属性:

Model_A:
  Name (NOT NULL)
  City (NOT NULL)
  FieldX (Nullable) - CharField

还有一个模型B,带有属性:

Model_B:
  Name (NOT NULL)
  City (NOT NULL)
  RelatedField (ForeignKey to an instance of Model_A)

现在,当我为 Model_A 添加记录时,我可能不需要填写 FieldX。

但是,当我为 Model_B 添加记录时,我必须选择 Model_A 的一个实例,然后如果该实例的 FieldXNULL,那么我也必须填写它(使它是强制性的)。

Model_A 的表单非常简单。

但是对于Model_B,我需要一个表格:

  1. 首先选择Model_A 的一个实例(下拉菜单)
  2. 显示在 1 中选择的实例 FieldX 的输入框(可编辑且必填,空白=False)。
  3. 显示其余字段(名称、城市、FieldY)。

这可以使用管理页面完成吗?还是我必须为此创建适当的表单和用户流程?

【问题讨论】:

    标签: python-3.x django django-admin django-1.11


    【解决方案1】:

    对于模型 B,我会覆盖 viewform 以便在管理站点中实现这一点。

    model_b_view = ModelBView.as_view()
    
    @admin.register(Model_B)
    class Model_B_Admin(admin.ModelAdmin):
        def get_urls(self):
            urls = super().get_urls()
            my_urls = [
                url(r'^add/$', 
                    self.admin_site.admin_view(model_b_view)),
            ]
            return my_urls + urls
    

    其中ModelBView 是一个模板视图,您必须覆盖其中的getpost,将Model_A 的所有实例发送到模板并在那里通过jquery 处理。

    【讨论】:

      【解决方案2】:

      我尚未对此进行测试,但您应该可以执行以下操作:

      from django.contrib import admin
      
      class ModelAForm(ModelForm):
          FieldX = CharField(
              required=True
          )
      
          class Meta:
              model = Model_A
              fields = ['FieldX']
      
      class ModelAInline(admin.StackedInline):
          model = Model_A
          form = ModelAForm
      
      class ModelBAdmin(admin.ModelAdmin):
          inlines = [
              ModelAInline
          ]
      
      admin.site.register(ModelB, ModelBAdmin)
      

      【讨论】:

        猜你喜欢
        • 2014-09-04
        • 2018-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-21
        • 1970-01-01
        • 2015-08-30
        • 1970-01-01
        相关资源
        最近更新 更多