【问题标题】:Values in Many-to-Many field not getting selected when editing an object in a custom(Non-admin) Django view在自定义(非管理员)Django 视图中编辑对象时未选择多对多字段中的值
【发布时间】:2011-11-11 02:27:15
【问题描述】:

我们有一个包含多对多字段的 django 模型。我们使用相同的表单来添加/编辑对象。当加载现有对象以进行编辑时,所有字段都有与之关联的值除了多对多字段(没有选择 MultipleSelectBox 小部件的选项)

是否有任何特殊方法可以将值绑定到多对多字段,以便在表单加载对象进行编辑时,该字段的当前值在 MultipleSelectBox 小部件中显示为选中状态。

我尝试阅读用户在 SO 上提出的类似问题,但找不到我的查询的答案:(。

【问题讨论】:

  • 很难从你写的内容中分辨出来。你没有给我们任何代码,我的魔法水晶球现在拒绝工作。你的表格是如何定义的?多对多关系的表单域?你到底要覆盖什么?怎么样?

标签: django django-models django-forms many-to-many


【解决方案1】:

有同样的问题,是由commit=False引起的。解决方法是save_m2m()

# Create a form instance with POST data.
f = AuthorForm(request.POST)
# Create, but don't save the new author instance.
new_author = f.save(commit=False)
# Modify the author in some way.
new_author.some_field = 'some_value'
# Save the new instance.
new_author.save()
# Now, save the many-to-many data for the form.
f.save_m2m()

【讨论】:

    【解决方案2】:

    尝试这样做! 这是我向您展示如何做到的示例:D

    class FirstModel(models.Model):
        title = models.CharField(max_length = 100, unique = True)
    
    class SecondModel(models.Model):
        name = models.CharField(max_length = 100, unique = True)
        first_model = models.ManyToManyField(FirstModel)
    
    class MyForm(forms.Form):
        name = forms.CharField(max_length = 100, required = True)
        first_model = forms.ChoiceField(widget = forms.MultipleSelect)
    

    将其保存在添加功能中后,然后在编辑功能中对其进行编辑,请执行以下操作:

    def edit(request):
        my_model = MyModel.objects.filter(name = 'You Unique Name').get()
        first_model = my_model.first_model.all()
        my_form = MyForm(initial = {'first_model': first_model})
    

    就是这样:D

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-24
      • 2011-06-26
      • 2012-11-17
      • 2012-08-23
      • 2018-12-17
      • 2017-05-21
      • 2014-04-11
      • 1970-01-01
      相关资源
      最近更新 更多