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

标签 python django

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/

相关文章:

python - 棋子检测 棋盘上Opencv

python - 将 Django UserCreationForm 的密码验证错误从密码 2 移至密码 1

django - 需要帮助理解序列化程序中的许多和源字段

python - 如何在 django 导航栏下拉列表中显示事件链接?

python - 学习 Django - 很好的入门项目

Python 循环引用

python - 根据索引列表从列表中删除项目

python - Scipy 和 Sklearn chi2 实现给出不同的结果

python - Easy_install 的 --prefix 选项不会改变它尝试安装我的包的位置

mysql - 通过 django 将时间插入 mysql 数据库时,它存储不同的时间