Django сохранить модель ManyToManyField с ModelMultipleChoiceField - PullRequest
0 голосов
/ 26 января 2020

Итак, я знаю, что есть несколько похожих вопросов, но ни одно из решений не помогло мне. Я попытался сохранить (commit = false) и save_m2m, а также кучу других вещей, но я получаю ошибку

NOT NULL constraint failed: home_services.managers_id

В любом случае вот мой код: views.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',
        ]

Я хочу, чтобы пользователь мог создать службу и выбрать 1 или более участников, которые по умолчанию django Модель пользователя.

1 Ответ

1 голос
/ 26 января 2020

Я хочу, чтобы пользователь мог создать службу и выбрать 1 или более участников, которые по умолчанию django Модель пользователя.

Вы не предоставляете 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,
)

Возможно, вы захотите узнать больше о blank и null .

...