用)(カスタム.SAVEを作成:ジャンゴ - 私はこのようなmodelformset_factory使用してフォームセットを作成する場合modelformset_factory
IngredientFormSet = modelformset_factory(RecipeIngredients, form=RecipeIngredientsForm)
formset = IngredientFormSet(request.POST)
と私のフォームは、私は私のカスタムをかけることになり、この
class RecipeIngredientsForm(forms.ModelForm):
Ingredient = forms.CharField(max_length= 100)
class Meta:
model = RecipeIngredients
exclude = ('weightmetric','recipe')
のように見えます。 save()メソッド?私はそれをRecipeIngredientsFormの下に置くことができますか?
[潜在的なソリューション]ビューで
はこのような何かを:
if formset.is_valid():
for form in formset:
obj = form.save(commit=False) #obj = RecipeIngredient model object
try:
ingredient_in_db = Ingredient.objects.get(name = form.cleaned_data.get('ingredientform'))
except:
ingredient_in_db = None
if ingredient_in_db:
obj.ingredient = ingredient_in_db
else:
new_ingredient = Ingredient.objects.create(name = form.cleaned_data.get('ingredientform'))
obj.ingredient = new_ingredient
obj.recipe = recipeobj
obj.save()
がちなみに、私はこの方法でも、私は(カスタム.SAVEを行うことができるようになると思います)、与えられたそのIフォームセット内の各フォームを取り出し、form.save(commit = False)を実行します。レシピオブジェクトへのアクセスが必要だったので、私の見解ではそれを行うのは簡単でした。
コミット? – RotaJota
私はカスタム成分のフィールドを処理して、すでに存在する場合は成分を取り出すか、成分が存在しない場合は新しい成分を作ります。次に、それらのリターンに基づいて外部キーの関係を作成する予定です。 – bento