【问题标题】:Django save ManyToManyField Model with ModelMultipleChoiceFieldDjango 使用 ModelMultipleChoiceField 保存 ManyToManyField 模型
【发布时间】:2020-05-11 21:13:52
【问题描述】:

所以我知道有一些类似的问题,但没有一个解决方案对我有用。我已经尝试了 save(commit=false) 和 save_m2m 以及其他一些东西,但我得到了错误

NOT NULL constraint failed: home_services.managers_id

无论如何,这是我的代码: 视图.py

def service(request):
    if request.user.is_authenticated:
        if request.method == 'POST':    #Create Service
            form = CreateServiceForm(request.POST)
            if form.is_valid():
                form.save()
                return HttpResponseRedirect('/service')     #Later change this to redirect to server page
        else:
            form = CreateServiceForm()
            args = {'user': request.user, 'form': form}
            return render(request, 'service.html', args)
    else:
        return HttpResponseRedirect('/feed')

models.py

class Services(models.Model):
    name = models.CharField(max_length=100, default='')
    description = models.CharField(max_length=500, default='')
    owner = models.OneToOneField(User, on_delete=models.CASCADE)
    managers = models.ForeignKey(User, related_name="managers", on_delete=models.CASCADE)
    members = models.ManyToManyField(User, related_name="members")

    def __str__(self):
        return str(self.name) + ": id" + str(self.id)

forms.py

class CreateServiceForm(forms.ModelForm):
    owner = forms.ModelChoiceField(queryset=User.objects.all())
    members = forms.ModelMultipleChoiceField(queryset=User.objects.all())

    class Meta:
        model = Services
        fields = [
            'name',
            'description',
            'owner',
            'members',
        ]

我希望用户能够创建服务并选择默认 django 用户模型中的 1 个或多个成员。

【问题讨论】:

    标签: python django manytomanyfield modelmultiplechoicefield


    【解决方案1】:

    我希望用户能够创建服务并选择默认 django 用户模型中的 1 个或多个成员。

    您没有提供managers,根据当前配置,这是不允许的。

    所以,改变:

    managers = models.ForeignKey(
        User, 
        related_name="managers", 
        on_delete=models.CASCADE,
    )
    

    收件人:

    managers = models.ForeignKey(
        User, 
        related_name="managers", 
        on_delete=models.CASCADE,
        blank=True,
        null=True,
    )
    

    您可能想了解更多关于blanknull 的信息。

    【讨论】:

    • 非常感谢。然后我做了: form.save(commit=False) form.save() form.save_m2m() 一切正常!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 2016-07-29
    • 2019-02-06
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    相关资源
    最近更新 更多