gpt4 book ai didi

django - 如何在 Django 表单中使用多个复选框保存多对多字段

转载 作者:行者123 更新时间:2023-12-04 23:06:11 26 4
gpt4 key购买 nike

我想知道如何在以下表格中color (多对多字段)可以由来自 CheckboxSelectMultiple 的值填充小部件。

#models.py

class Color(models.Model):
RED = 1
BLACK = 2

COLOR_CHOICES = (
(RED, _('Red')),
(BLACK, _('Black')),
)

name = models.CharField(_('Color'), max_length=512,
choices=COLOR_CHOICES, blank=True)
class Car(models.Model):
color = models.ManyToManyField(Color, blank=True, null=True)

def save(self):
self.slug = slugify(self.name)
super(Car, self).save()

#forms.py
class AddCar(forms.ModelForm):
color = forms.MultipleChoiceField(
choices=Color.COLOR_CHOICES,
widget=forms.CheckboxSelectMultiple(),
required=False
)

#view.py
def add(request):
if request.method == 'POST':
form = AddCar(request.POST)
...
if form.is_valid():
car = form.save(commit=False)

for c in request.POST.getlist('color'):
car.color.add(c)

car.save()
form.save_m2m()

return redirect('/')

#错误
'Car' instance needs to have a primary key value before a many-to-many relationship can be used.

最佳答案

你在做什么form.save(commit=False)其中实际上并未在 DB 中创建记录,因此它无法存储 M2M 字段。做 form.save_m2m()保存表格后。

或者从您的代码中,您可以移动 car.color.add()保存 car 后.而且你也不需要 form.save(commit=False) .

关于django - 如何在 Django 表单中使用多个复选框保存多对多字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11642579/

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