Я собрал форму для сохранения рецепта. Он использует форму и встроенный набор форм. У меня есть пользователи с текстовыми файлами, содержащими рецепты, и они хотели бы вырезать и вставить данные, чтобы сделать запись проще. Я разработал, как заполнить часть формы после обработки исходного ввода текста, но я не могу понять, как заполнить встроенный набор форм.Исходные данные для встроенных форм Django
Похоже, что решение почти прописано здесь: http://code.djangoproject.com/ticket/12213, но я не могу собрать все вместе.
Мои модели:
#models.py
from django.db import models
class Ingredient(models.Model):
title = models.CharField(max_length=100, unique=True)
class Meta:
ordering = ['title']
def __unicode__(self):
return self.title
def get_absolute_url(self):
return self.id
class Recipe(models.Model):
title = models.CharField(max_length=255)
description = models.TextField(blank=True)
directions = models.TextField()
class Meta:
ordering = ['title']
def __unicode__(self):
return self.id
def get_absolute_url(self):
return "/recipes/%s/" % self.id
class UnitOfMeasure(models.Model):
title = models.CharField(max_length=10, unique=True)
class Meta:
ordering = ['title']
def __unicode__(self):
return self.title
def get_absolute_url(self):
return self.id
class RecipeIngredient(models.Model):
quantity = models.DecimalField(max_digits=5, decimal_places=3)
unit_of_measure = models.ForeignKey(UnitOfMeasure)
ingredient = models.ForeignKey(Ingredient)
recipe = models.ForeignKey(Recipe)
def __unicode__(self):
return self.id
Форма рецепт создается с помощью ModelForm:
class AddRecipeForm(ModelForm):
class Meta:
model = Recipe
extra = 0
И соответствующий код в представлении (звонки разобрать форму входа будут удалены):
def raw_text(request):
if request.method == 'POST':
...
form_data = {'title': title,
'description': description,
'directions': directions,
}
form = AddRecipeForm(form_data)
#the count variable represents the number of RecipeIngredients
FormSet = inlineformset_factory(Recipe, RecipeIngredient,
extra=count, can_delete=False)
formset = FormSet()
return render_to_response('recipes/form_recipe.html', {
'form': form,
'formset': formset,
})
else:
pass
return render_to_response('recipes/form_raw_text.html', {})
С FormSet() пустым, как указано выше, я могу успешно запустить страницу. Я попробовал несколько способов накормить formset количества, unit_of_measure и ингредиенты я идентифицированный в то числе:
- ввод исходных данных, но это не работает для встроенного FormSets
- проходящего словарь, но генерирует управление ошибки формы
- играл с INIT, но я немного из моей глубины там
Любые предложения с благодарностью.
Большой совет Арам, большое вам спасибо. Я попробую варианты сегодня. Мне особенно нравится иметь простой вариант ... – Sinidex
Использование zip определенно работает, и я могу подтвердить, что сохранение формы в обычной моде также работает. Мне все еще нужно построить соответствующий синтаксический анализ соответствующим ингредиентам и единицам измерения объекта, как вы указали, но я думаю, что это должно быть управляемым. Отличное решение. – Sinidex
Да, да и да. Это отличное решение! Мне было трудно добраться до этого. Сначала я изучал, как создавать каждую форму в наборе. Затем реализована начальная * * работа, на основе формы (не formet). В zip мы доверяем. – Flowpoke