У меня есть набор форм, который настроен для использования таблицы соединений.Таблица соединения объединяет таблицу рецептов и таблицу ингредиентов и выглядит следующим образом:
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 был создан, чтобы включить раскрывающееся меню по умолчанию.для поля ингредиента (многие ко многим с таблицей ингредиентов), в поле ввода, чтобы позже я мог использовать 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 Turkey '": RecipeIngredient.ingredient" должен быть экземпляром "Ingredient".
Я подумал, что мне нужно взять то, что набрано в поле ввода, а затем выполнить поиск по немумодель Ingredient что-то вроде Ingredient.objects.get (title = "blah")
Затем каким-то образом установите этот объект равным RecipeIngredient.ingredient в наборе форм перед проверкой набора форм.К сожалению, я не знаю, где и как это сделать.Я попытался зайти в оболочку и настроить набор форм, а затем выполнил на нем dir (набор форм), чтобы выяснить, сможет ли это пролить свет на мою проблему, но я ничего не придумал.У кого-нибудь есть какие-либо предложения о том, как взять то, что передается во входных данных для набора форм, и превратить это в объект из таблицы ингредиентов?Я знаю, что в какой-то момент пользователь может ввести ингредиент, которого нет в базе данных, и я планирую выполнить поиск того, что передано, и если его нет в базе данных, я бы его создал, а затем передал этот новыйвозражать против 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))
Спасибо за любую помощь, которую вы можете оказать.