1

Djangoでレシピ/材料モデルを作成しようとしています

私のmodels.pyで私は得ました

class Ingredient(models.Model):
    name = models.CharField(max_length=20)

class Recipe(models.Model):
    name = models.CharField(max_length=50)
    ingredients = models.ManyToManyField(Ingredient, blank=True)

しかし、管理者でレシピまたは材料を作成すると、次のようになります。

IntegrityError at /admin/menuview/ingredient/add/
menuview_ingredient.recipe_id may not be NULL

私はここで何が間違っているのですか?

4

2 に答える 2

1

null=Trueパラメータも関係に与える必要があると思います。

ingredients = models.ManyToManyField(Ingredients, blank=True, null=True,)
于 2012-09-26T06:12:48.747 に答える
1

あなたの問題はこれに似ています:外部キーとIntegrityError:idはNULLではないかもしれません

これを修正するには、保存時に次のようなことを行います。

>>> s = Recipe()
>>> s.name = 'Blah'
>>> obj = Ingredient(...)
>>> obj.save()
>>> s.ingredients = obj
>>> s.save()

DjangoDocにはさらに多くの例がありManyToManyFieldます。たとえば、あなたの場合:

>>> i = Ingredient.objects.get(id=1)
>>> e = i.recipe_set.create(
...     name ='strawberry pancake',
... )
# No need to call e.save() at this point -- it's already been saved.

これは次と同等です(ただし、はるかに単純です)。

>>> i = Ingredient.objects.get(id=1)
>>> e = Recipe(
...     ingredients=i,       
...     name='strawberry pancacke',
... )
>>> e.save(force_insert=True)
于 2012-09-26T06:19:17.510 に答える