我有一個formset被設置爲使用連接表。連接表 加入了一個配方表和配料表,看起來像這樣django自定義ManyToMany保存模型Formset選項
class RecipeIngredient(models.Model):
'''intermediate model between Ingredient and recipe.models.recipe
for many to many'''
quantity = models.IntegerField()
measurement = models.CharField(max_length=200)
ingredient = models.ForeignKey(Ingredient)
preparation = models.CharField(max_length=100, blank=True,
null=True)
recipe = models.ForeignKey(Recipe)
我創建像這樣
IngFormSet = inlineformset_factory(Recipe, RecipeIngredient,
formset=BaseIngFormSet, extra=5)
的BaseIngFormSet創建打開默認的下拉菜單 的該formset成分字段(許多與成分表),到一個 輸入框,以便我可以稍後在 輸入框中使用jquery-autocomplete。這將節省一些時間,用戶不得不滾動長長的配料列表以供選擇。
class BaseIngFormSet(BaseModelFormSet):
def add_fields(self, form, index):
super(BaseIngFormSet, self).add_fields(form,index)
form.fields["ingredient"] = forms.CharField()
我目前停留在,當表單提交 它失敗,因爲該成分不再在 成分表
無法分配「u'Ground的實例部分土耳其'': 「RecipeIngredient.ingredient」必須是 「成分」實例。
我想我需要採取什麼鍵入到輸入框中,然後做一個 搜索就可以對成份模型類似 Ingredient.objects.get(標題=「嗒嗒」)
然後以某種方式將該對象設置爲 表單集中的RecipeIngredient.ingredient,然後驗證formset。可悲的是,雖然我不知道 在哪裏或如何做到這一點。我嘗試着進入shell並設置 formset,然後對它做一個dir(formset)以查看是否會在我的問題上遇到任何問題,但我沒有提出任何問題。有沒有人 有任何建議如何採取通過配料 輸入的formset,並從 成分表變成一個對象? 我知道在某些時候用戶可能會輸入一個不在 數據庫中的成分,我打算對傳遞的內容進行查找,如果在數據庫中找不到 ,我會創建它,然後將該新對象傳遞給該表單組。 這是我目前在我看來,這種形式
from django.shortcuts import render_to_response, get_object_or_404,
get_list_or_404, redirect
from django.template import RequestContext
from django.contrib.auth.decorators import login_required
from django.forms.models import modelformset_factory,
inlineformset_factory
from models import Recipe, RecipeIngredient
from ingredient.models import Ingredient
from forms import RecipeForm, BaseIngFormSet
@login_required
def recipe(request):
IngFormSet = inlineformset_factory(Recipe, RecipeIngredient,
formset=BaseIngFormSet, extra=5)
if request.method=='POST':
form = RecipeForm(request.POST, request.FILES)
formset = IngFormSet(request.POST)
if form.is_valid() and formset:
new_recipe = form.save()
instances = formset.save(commit=False)
for instance in instances:
instance.recipe_id = new_recipe.id
instance.save()
return redirect(new_recipe.get_absolute_url())
else:
form = RecipeForm()
formset = IngFormSet(queryset=RecipeIngredient.objects.none())
return render_to_response('recipe/recipe_form.html', {'form':
form, 'formset' : formset,}, context_instance=RequestContext(request))
感謝您的幫助,您可以提供。