Страницы

Поиск по вопросам

четверг, 11 июля 2019 г.

Не выходит сохранить formset_factory в django

В models.py
class Recipes(models.Model): name = models.CharField(max_length=200) autor = models.ForeignKey(User) date = models.DateTimeField(auto_now=True) text = models.TextField(max_length=5000)
class Products(models.Model): name = models.CharField(max_length=200) text = models.TextField(max_length=5000)
def __unicode__(self): return self.name
class ProductsInRecipes(models.Model): product = models.ForeignKey(Products) recipe = models.ForeignKey(Recipes) weight = models.PositiveIntegerField( validators=[MaxValueValidator(10000)], blank=False, null=False)
В forms.py
# -*- coding: utf-8 -*- from django import forms from recipes.models import Recipes, ProductsInRecipes
class RecipesAddForm(forms.ModelForm): class Meta: model = Recipes fields = ('name', 'text')
class ProductsInRecipesForm(forms.ModelForm): class Meta: model = ProductsInRecipes fields = ('product', 'weight')
В views.py
# -*- coding: utf-8 -*- from django.shortcuts import render_to_response, redirect from django.core.context_processors import csrf from django.template import RequestContext from django.forms.formsets import formset_factory from recipes.forms import RecipesAddForm, ProductsInRecipesForm
def add(request): args = {} args.update(csrf(request)) args['form'] = RecipesAddForm() args['form2'] = formset_factory( ProductsInRecipesForm, extra=2, max_num=30, validate_max=True) if request.POST: form = RecipesAddForm(request.POST) ProuctsFormSet = formset_factory(ProductsInRecipesForm) form2 = ProuctsFormSet(request.POST) args['form'] = form args['form2'] = form2 if form.is_valid() and form2.is_valid(): recipe = form.save(commit=False) recipe.autor = request.user recipe.save() form.save_m2m() for product in form2: product.save(commit=False) product.recipe = recipe product.save() return redirect('/ok/') return render_to_response('recipes_add.html', args, RequestContext(request)) return render_to_response('recipes_add.html', args, RequestContext(request))
И шаблон recipes_add.html
{% extends "main.html" %}
{% block content %}

{% csrf_token %} {{form}} {% for form in form2 %} {{form.product}} {{form.weight}} {% endfor %} {{form2.management_form}}

{% endblock content %}
При нажатии на submit ошибка: NOT NULL constraint failed: productsInRecipes.recipe_id
Данные из form сохраняются, а из form2 соответственно нет. Как правильно сохранить form2 или что я делаю не так?


Ответ

Если всё правильно понимаю проблема вот в этом куске кода
product.save(commit=False)
куда ты сохраняешь результат? он у тебя в воздухе весит, соответственно далее ты работаешь уже не с объектом модели, а всё с той же формой:
product.recipe = recipe product.save()
Учись правильно формировать названия переменных и не будет таких проблем:
for product_form in form2: product = product_form.save(commit=False) product.recipe = recipe product.save()

Комментариев нет:

Отправить комментарий