La plupart des questions à ce sujet semblent être axées sur la réduction des tables m2m. Je suis curieux de savoir comment afficher les champs de la table intermédiaire dans une (ou deux) formes combinées.Django: Affichage des champs des tables intermédiaires dans les formulaires
L'idée est que j'ai beaucoup de ressources et de nombreux repas. Différents repas peuvent avoir la même ressource, mais en quantités différentes. Dire: Burrito a x lb de boeuf, mais les fajitas ont y.
Je veux créer un formulaire pour éditer le repas Burrito afin que je puisse voir/éditer/créer: Le nom du repas, les ressources dans le repas, et la quantité associée à la ressource dans ce repas. Mon code actuel affiche un formulaire avec tous, mais les montants associés aux ressources via la table m2m
J'ai deux modèles reliés par une table intermédiaire:
class Resource(models.Model):
name = models.CharField(max_length=200)
unit = models.ForeignKey(Unit)
units_per_pack = models.PositiveSmallIntegerField()
packs_per_case = models.PositiveSmallIntegerField()
allergens = models.ManyToManyField(Allergen, blank=True)
class Meal(models.Model):
name = models.CharField(max_length=200)
resources=models.ManyToManyField(Resource,through='MealResourceRelationship')
recipe = models.TextField(default='')
class MealResourceRelationship(models.Model):
resource = models.ForeignKey(Resource)
meal = models.ForeignKey(Meal)
units_per_person = models.DecimalField(max_digits=19,decimal_places=2)
J'essaie d'utiliser un ModelForm simple vu ci-dessous:
class MealForm(forms.ModelForm):
class Meta:
model = Meal
fields = '__all__'
avec ce point de vue:
def meal_edit(request, pk=None, template_name='foodstuffs/meal_edit.html'):
if id:
meal = get_object_or_404(Meal, pk=pk)
else:
meal = Meal()
if request.POST:
form = MealForm(request.POST,instance=meal)
if form.is_valid():
meal_mod = form.save(commit=False)
meal_mod.save()
# remove existing resources
meal_mod.resources.clear()
for resource in form.cleaned_data.get('resources'):
meal_resource_rel = MealResourceRelationship(meal=meal_mod,
resource=resource,
units_per_person=1)
meal_resource_rel.save()
# messages.add_message(request, messages.SUCCESS, _('Meal correctly saved.'))
# If the save was successful, redirect to another page
redirect_url = reverse('meal_list')
return HttpResponseRedirect(redirect_url)
else:
form = MealForm(instance=meal)
args = {}
args.update(csrf(request))
args['form'] = form
args['meal'] = meal
return render_to_response(template_name, args)
Tous Des idées? Je vous remercie!