gpt4 book ai didi

python - 未将 checkbox-es 保存到 Django 管理数据库

转载 作者:行者123 更新时间:2023-12-01 09:27:32 25 4
gpt4 key购买 nike

Django == 1.11
我有一个简单的 models.py ,其中包含 tasklabel (它应该是可以选择的复选框)。

class Task(models.Model):
author = models.ForeignKey('auth.User', on_delete=models.PROTECT)
name_task = models.CharField(max_length=1000)
label_task = models.ManyToManyField(LabelTask)

def __str__(self):
return self.name_task

标签

class LabelTask(models.Model):
name = models.CharField(max_length=1000)

def __str__(self):
return self.name

forms.py 看起来像

class CreateTask(forms.ModelForm):
label_task = forms.ModelMultipleChoiceField(queryset=LabelTask.objects.all(), required=False,
widget=forms.CheckboxSelectMultiple)

class Meta:
model = Task
exclude = ['author']

还有我的views.py

@login_required
def secret_page(request):
form = CreateTask(request.POST or None)
if form.is_valid():
print('Valid')
instance = form.save(commit=False)
instance.author = request.user
instance.save()
messages.success(request, "Successfully Created")
else:
print('Not valid')
form = CreateTask()
return render(request, 'task/task.html', {'form': form})

例如,转到浏览器并以以下形式输入一些数据 - https://www.dropbox.com/s/rf7tbbvushln94d/Screenshot%20from%202018-05-09%2011-33-24.png?dl=0
然后按提交
我们看到了什么? https://www.dropbox.com/s/h27kdqddl1ns0r1/Screenshot%20from%202018-05-09%2011-33-56.png?dl=0
我们只选择了 Python,但在管理中,我们看到了整个选择。我不明白为什么会这样。
谢谢。

最佳答案

当您使用 commit=False 保存表单时,您需要调用表单的save_m2m保存多对多数据的方法。

if form.is_valid():
print('Valid')
instance = form.save(commit=False)
instance.author = request.user
instance.save()
form.save_m2m()

请参阅 the modelform save method 的文档了解更多信息。

如果你在更改代码后创建一个新任务(仍然勾选python),那么你仍然会在Django管理中看到所有标签任务,但是python现在将被选择。

关于python - 未将 checkbox-es 保存到 Django 管理数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50248969/

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