如何从两个模型中更新多对多?

2024-04-23 11:02:13 发布

您现在位置:Python中文网/ 问答频道 /正文

你好,我正在尝试更新两个模型的多对多字段。我可以从集群模型成功地更新带有M2M字段的集群模型,但是我不能从子网模型更新它。你知道吗

我将得到的子网模板形式是一个集群列表。。。布乌特

  1. 分配给子网的群集未显示选中状态
  2. 当我选择一个集群并更新表单时,它不会将子网添加到集群中

现在我在想,我只能从集群端更新m2m关系,我说的对吗?你知道吗

型号.py

class Cluster(models.Model):
    cluster = models.CharField(max_length=130, unique=True)
    subnet = models.ManyToManyField('Subnet', null=True, blank=True)

class Subnet(models.Model):
    network_address = models.IPAddressField()
    subnet_prefix = models.ForeignKey('SubnetPrefix')

表单.py

class SubnetForm(forms.ModelForm):
    cluster = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple, required=True, queryset=Cluster.objects.all())

def __init__(self, *args, **kwargs):
    self.helper = FormHelper()
    self.helper.form_tag = True
    self.helper.layout = Layout(
        Div(
            Div(Field('network_address', css_class="input-sm"), css_class="col-lg-4"),
            Div(Field('subnet_prefix', css_class="input-sm"), css_class="col-lg-2"),
            css_class="row"
        ),
        Div(
            Div(Field('cluster', css_class="nav nav-list"), css_class="col-lg-4"),
            css_class="row"
        ),
        Div(
            Div(
                Submit('submit', 'Submit'),
            ),
            css_class="row",
        ),
    )
    super(SubnetForm, self).__init__(*args, **kwargs)

    class Meta:
        model = Subnet

视图.py

class SubnetUpdateView(UpdateView):
    template_name = 'subnet_update.html'
    model = Subnet
    form_class = SubnetForm
    success_url = '#'

    def form_valid(self, form):
        messages.success(self.request, u"Subnet updated successfully.")
        return super(SubnetUpdateView, self).form_valid(form)

子网_更新.html

{% extends 'base.html' %}
{% load crispy_forms_tags %}

{% block content %}
    <h1>Update Subnet</h1>
    <br />
        {% crispy form %}
    <br />
{% endblock %}

聚类表单的html输出

<div class="row" >
<div class="col-lg-4" >
<div id="div_id_cluster" class="form-group">
    <label for="id_cluster_0" class="control-label  requiredField">Cluster<span class="asteriskField">*</span></label>
    <div class="controls " class="nav nav-list">
        <label class="checkbox"><input type="checkbox" name="cluster" id="id_cluster_1" value="1"  class="nav nav-list">CLUSTER01</label>
        <label class="checkbox"><input type="checkbox" name="cluster" id="id_cluster_2" value="2" class="nav nav-list">CLUSTER02</label>
        <label class="checkbox"><input type="checkbox" name="cluster" id="id_cluster_3" value="3"  class="nav nav-list">CLUSTER03</label>
    </div>
</div>
</div>
</div>

Tags: selfdivformidmodels集群csslabel
1条回答
网友
1楼 · 发布于 2024-04-23 11:02:13

这似乎是以下内容的副本:

Django ModelForm for Many-to-Many fields

第一个答案不会改变模型,并向您展示了如何使init和save方法复杂化,以使modelforms工作。你知道吗

第二个答案是通过模型显式定义自己的m2m,从而保持表单的简单性。你知道吗

相关问题 更多 >