Good day,
I am new to this list, but I would like to understand better what is going on
and how I can fix it the Django way.
I have a model similar to the ingredients list of a recipe.
class FoodItem(models.Model):
name = models.CharField()
class Recipe(models.Model):
input = models.ForeignKey(FoodItem, related_name="recipe", ...)
qty = models.FloatField()
ingredient = models.ForeignKey(FoodItem, ...)
class Meta:
unique_together = ('input', 'ingredient')
We don't want the recipe to list the same ingredient twice.
Then I make a basic BaseInlineFormSet. I use Javascript to add forms and
delete forms dynamically. So let's say I first create this data:
Input, Qty, Ingredient
Cookies, 1, Sugar
Cookies, 2, Eggs
Cookies, 4, Flour
Cookies, 1, Chocolate Chips
It's perfect. Then I go back and try to update the data. I remove the Flour
from the recipe. It gets marked for deletion and hidden from the user. Then I
think, "Oh wait! That was supposed to be 6 of the Flour!" So I add a new data
entry form to the formset with this data:
Cookies, 6, Flour
I click on save, and I get a validation error. That input and ingredient
already exist. And it's right. The form marked for deletion that has 4 Flour
does not get deleted until the call to formset.save(). But the new form is not
valid because it violates the unique constraint on the model. I did develop a
roundabout way of dealing with the situation: I simply delete all the instances
from the database for forms that are marked for deletion before calling
formset.is_valid(). But I keep thinking to myself that there must be something
I am missing.
Thank you,
Matthew Pava
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/84f80d96f27b4370bb667740a9b75651%40ISS1.ISS.LOCAL.
For more options, visit https://groups.google.com/d/optout.