如何在Django的Manytomany字段中添加对象

德克斯特·纳鲁(Dexter Naru)

我有两个模型(组和联系人)。一个组可以有多个联系人,而一个联系人可以在多个组中。

我可以创建联系人,但现在无法创建组。

当我验证form.is_valid()时,它返回false,而我得到的错误是

{'contacts': [ValidationError(['Enter a list of values.'])]}

我在这里想念什么?

models.py

class Contact(models.Model):
    # Fields
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)

    def __str__(self):
        return self.name

class Group(models.Model):
    name = models.CharField(max_length=32)
    contacts = models.ManyToManyField(Contact, related_name='groups')

表格

class CreateGroupForm(ModelForm):
    class Meta:
        model = Group
        fields = ["name", "contacts"]
        widgets = {
            'name': TextInput(attrs={
                "placeholder" : "",
                "class": "form-control"
            }),
            'contacts': Select(attrs={
                "placeholder" : "",
                "class": "form-control"
            })
        }

class CreateContactForm(ModelForm):
    class Meta:
        model = Contact
        fields = "__all__"
        widgets = {
            'first_name': TextInput(attrs={
                "placeholder" : "Nombre",
                "class": "form-control"
            }),
            'last_name': TextInput(attrs={
                "placeholder" : "Apellido",
                "class": "form-control"
            })
        }

views.py

def create_group(request):
    if request.method == "POST":
        form = CreateGroupForm(request.POST)
        if form.is_valid():
            group = form.save(commit=False)
            group.save()
        else:
            print(form.errors.as_data())
            form = CreateGroupForm()

        return render(request, 'create-group.html', {'form':form})
    elif request.method == "GET":
        form = CreateGroupForm(request.POST or None)
        return render(request, "create-group.html", { 'form' : form})
威廉·范昂塞姆

对于ManyToManyField,使用Select窗口小部件[Django-doc]并没有多大意义,因为仅选择单个元素,因此构建SelectMultiple窗口小部件[Django-doc]来选择多个对象。

您还应该查看HTML表单是否确实为该contact字段提交值您可以通过检查浏览器数据来做到这一点。

但是,即使您可以使用commit=False,该表单也无法保存“多对多”字段。事实上,为了节省在许多到许多领域的记录,首先Group对象应保存,因为结表[维基]ForeignKeyS到ContactGroup,因此这些记录需要首先创建。如果表单无效,也最好不要构造一个新的Form,因为这样在呈现该表单时将报告错误:

def create_group(request):
    if request.method == 'POST':
        form = CreateGroupForm(request.POST)
        if form.is_valid():
            form.save()  # ← no commit=False
            return redirect('name-of-some-view')
        # do not create a new form.
    else:
        form = CreateGroupForm()
    return render(request, "create-group.html", { 'form' : form})

注意:如果POST请求成功,则应创建一个redirect[Django-doc]以实现Post / Redirect / Get模式[wiki]这样可以避免在用户刷新浏览器时发出相同的POST请求。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在ListIterator迭代期间正确添加对象?

来自分类Dev

如何在数组末尾添加对象的副本?

来自分类Dev

如何在对象文字中添加对象文字

来自分类Dev

如何在与自身(对象级别)不相关的Django模型中初始化ManyToMany字段?

来自分类Dev

如何在Spring RedirectView中添加对象

来自分类Dev

如何在数组中添加对象?

来自分类Dev

如何在SceneKit SWIFT中添加对象

来自分类Dev

如何在单例NSMutableArray中添加对象

来自分类Dev

Django管理员添加对象字段错误

来自分类Dev

在Django的ManyToMany关系中按ID添加对象

来自分类Dev

如何在NodeJS中的JSON中添加对象中的所有字段?

来自分类Dev

如何在Django的Manytomany字段中添加对象

来自分类Dev

如何在ListIterator(反向)迭代期间正确添加对象?

来自分类Dev

Flutter Firestore,如何在数组中添加对象列表

来自分类Dev

如何在Django中修复Manytomany字段

来自分类Dev

如何在javascript中过滤后添加对象值

来自分类Dev

如何在Django中设置ManyToMany字段的值?

来自分类Dev

如何在“提交”按钮后添加对字段的验证

来自分类Dev

如何在div中添加对象

来自分类Dev

如何在Spring RedirectView中添加对象

来自分类Dev

如何使用ehcache在缓存中添加对象数组,其中每个对象都有多个字段?

来自分类Dev

NSMutableArray如何在Swift中使用let添加对象

来自分类Dev

如何在SceneKit SWIFT中添加对象

来自分类Dev

如何在JSON中添加对象

来自分类Dev

如何在 OkHttpClient 中向 MultipartBody 添加对象(即 UserData)类型列表

来自分类Dev

如何在序列化数据中附加对象列表?在 Django Rest 框架中

来自分类Dev

如何在数组中添加对象

来自分类Dev

如何在数组中添加对象成员?

来自分类Dev

如何在 Django 模型中自动添加对象?

Related 相关文章

  1. 1

    如何在ListIterator迭代期间正确添加对象?

  2. 2

    如何在数组末尾添加对象的副本?

  3. 3

    如何在对象文字中添加对象文字

  4. 4

    如何在与自身(对象级别)不相关的Django模型中初始化ManyToMany字段?

  5. 5

    如何在Spring RedirectView中添加对象

  6. 6

    如何在数组中添加对象?

  7. 7

    如何在SceneKit SWIFT中添加对象

  8. 8

    如何在单例NSMutableArray中添加对象

  9. 9

    Django管理员添加对象字段错误

  10. 10

    在Django的ManyToMany关系中按ID添加对象

  11. 11

    如何在NodeJS中的JSON中添加对象中的所有字段?

  12. 12

    如何在Django的Manytomany字段中添加对象

  13. 13

    如何在ListIterator(反向)迭代期间正确添加对象?

  14. 14

    Flutter Firestore,如何在数组中添加对象列表

  15. 15

    如何在Django中修复Manytomany字段

  16. 16

    如何在javascript中过滤后添加对象值

  17. 17

    如何在Django中设置ManyToMany字段的值?

  18. 18

    如何在“提交”按钮后添加对字段的验证

  19. 19

    如何在div中添加对象

  20. 20

    如何在Spring RedirectView中添加对象

  21. 21

    如何使用ehcache在缓存中添加对象数组,其中每个对象都有多个字段?

  22. 22

    NSMutableArray如何在Swift中使用let添加对象

  23. 23

    如何在SceneKit SWIFT中添加对象

  24. 24

    如何在JSON中添加对象

  25. 25

    如何在 OkHttpClient 中向 MultipartBody 添加对象(即 UserData)类型列表

  26. 26

    如何在序列化数据中附加对象列表?在 Django Rest 框架中

  27. 27

    如何在数组中添加对象

  28. 28

    如何在数组中添加对象成员?

  29. 29

    如何在 Django 模型中自动添加对象?

热门标签

归档