gpt4 book ai didi

django - Django ModelForm验证M2M的自定义自动完成功能,而不是丑陋的Multi-Select

转载 作者:行者123 更新时间:2023-12-02 04:18:08 26 4
gpt4 key购买 nike

给定以下模型(为便于理解,请删减):

class Venue(models.Model):
name = models.CharField(unique=True)

class Band(models.Model):
name = models.CharField(unique=True)

class Event(models.Model):
name = models.CharField(max_length=50, unique=True)
bands = models.ManyToManyField(Band)
venue = models.ForeignKey(Venue)
start = models.DateField()
end = models.DateField()

管理区域非常适合我的工作,但我想稍微开放一下站点,以便某些用户可以添加新的事件。对于 public 部分,我在这些模型上有几个我不希望公众看到的“管理”字段(很容易修复)。

但是,我的特定问题是在创建新事件时更改ManyToMany选择的显示。因为可能要为某个事件列出的Band的数量不应作为多选框一起发送,所以我想使用可处理倍数的AutoComplete(如“Tags”框,在此处为StackOverflow!)。

我有这部分在工作,它正确地用Band.id填充了一个隐藏的输入,并用逗号分隔了一个值。 但是,我不明白如何让Django使用 ModelForms 进行验证,以及如何验证“波段”选择。

理想情况下,我想像StackOverflow上的标签那样自动完成,并以某种Delimited字符串发送选定的Band ID-同时让Django验证通过的band是否存在,等等,就像我离开了烦人的multi-选择适当的列表。

我必须为表单或模型创建自己的“自动完成字段”类型,然后使用该类型吗?我还有什么要注意的吗?

我已经看到了一些现有的AutoComplete小部件,但是我真的很想使用我自己的Autocomplete代码,因为它已经设置好了,其中有些看起来有些复杂。

这里有更多的文本/解释,但是我减少了,因为我避免使用Wall Of Text。如果我遗漏了重要的内容,请告诉我。

最佳答案

不确切知道您的自动完成代码在做什么,很难说,但是只要它发送频段的ID,就像它们与<select>一起发送一样,则ModelForm应该照常对其进行验证。

基本上,您的POST字符串应如下所示:

name=FooBar2009&bands=1&bands=3&bands=4&venue=7&start=...

最简单的方法可能是使用Javascript为每个带名称 band和带ID作为值输入的带添加(和删除)一个隐藏的输入字段。然后,当用户提交表单时,浏览器将负责发布正确的内容,而ModelForm将对其进行验证。

关于django - Django ModelForm验证M2M的自定义自动完成功能,而不是丑陋的Multi-Select,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1528059/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com