@AlexMine
Учусь

Как сохранить запись?

Доброй ночи, просидел 2 часа над вопросом как сохранить запись в бд? Вот код
#form
class AddPerformerForm(ModelForm):
    categories = forms.ModelChoiceField(queryset=Category.objects.all(),
                                        widget=forms.CheckboxSelectMultiple,
                                        empty_label=None)

    class Meta:
        model = Performer
        fields = ['user', 'categories']
#models
class Category(models.Model):
    name = models.CharField(max_length=64)

    def __str__(self):
        return self.name


class Performer(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
    )
    categories = models.ManyToManyField(Category)
#view
def create_performer(request):
    form = AddPerformerForm({'user': request.user})
    if request.method == 'POST':
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/')
        else:
            return HttpResponse('No')
    context = {"form": form}
    return render(request, "performerslist/addperformer.html", context)

<form action="/create-performer/" method="POST">
			{% csrf_token %}
				<div class="row">
				{% for category in form.categories %}						
						{{category.tag}}
						<label for="{{category.id_for_label}}">{{category.choice_label}}</label>
						<br>
				{% endfor %}
				<button class="btn">button</button>
			</div>
		</form>

Дело в том, что форма не проходит валидацию, потому что в форму передается только категории без самого юзера.
  • Вопрос задан
  • 121 просмотр
Пригласить эксперта
Ответы на вопрос 1
form = AddPerformerForm({'user': request.user})
В этой строчке вы инициализируете форму только с юзером, не передавая обязательные categories. Конечно она не пройдёт валидацию.
if request.method == 'POST':
    form = AddPerformerForm({'user': request.user, 'categories': request.POST['ключ-с-категориями']})
    if form.is_valid():
        form.save()
        return HttpResponseRedirect('/')
    else:
        return HttpResponse('No')
form = AddPerformerForm()
context = {"form": form}
return render(request, "performerslist/addperformer.html", context)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы