Ho messo insieme un modulo per salvare una ricetta. Usa un modulo e un formset in linea. Ho utenti con file di testo contenenti ricette e vorrebbero tagliare e incollare i dati per facilitare l'accesso. Ho elaborato come compilare la parte del modulo dopo aver elaborato l'input di testo non elaborato, ma non riesco a capire come popolare il formset in linea.Formati iniziali per i moduli in linea Django
Sembra che la soluzione sia quasi specificata qui: http://code.djangoproject.com/ticket/12213 ma non riesco a mettere insieme i pezzi.
I miei modelli:
#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
La forma ricetta viene creata usando un ModelForm:
class AddRecipeForm(ModelForm):
class Meta:
model = Recipe
extra = 0
E il relativo codice nella visualizzazione (chiamate per analizzare il modulo ingressi vengono cancellati):
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', {})
Con FormSet() vuoto come sopra, posso avviare correttamente la pagina. Ho provato un paio di modi per alimentare il formset la quantità, unit_of_measure e gli ingredienti ho identificato tra cui:
- i dati di impostazione iniziale, ma che non funziona per formsets linea
- il superamento di un dizionario, ma che genera la gestione errori di forma
- giocato in giro con init ma io sono un po 'fuori dalla mia profondità ci
Tutti i suggerimenti molto apprezzato.
Ottimo consiglio Aram, grazie mille. Proverò le opzioni oggi. Mi piace soprattutto avere un'opzione facile ... – Sinidex
L'utilizzo di zip funziona sicuramente e posso confermare che anche il salvataggio del modulo nel solito modo funziona. Ho ancora bisogno di costruire il matching del testo analizzato con gli ingredienti rilevanti e l'unità di misura oggetto come hai sottolineato, ma penso che dovrebbe essere gestibile. Ottima soluzione. – Sinidex
Sì sì e sì. Questa è un'ottima soluzione! Ho avuto difficoltà a raggiungere questo. Prima stavo cercando come costruire ogni modulo nel set. Quindi, l'iniziale * realizzato * funziona, su una base di forma (non formata). In zip ci fidiamo di – Flowpoke