/ / Comment ajouter un formulaire en tant qu'attribut de champ dans un modèle Django - python, django, modèles django, formulaires django

Comment ajouter un formulaire en tant qu'attribut de champ dans un modèle Django - python, django, modèles django, formulaires django

J'ai un objet ModelForm pour un objet Product configuré comme ceci:

class ProductForm(forms.ModelForm):
compositon_choices = ((2L, u"Calcium (100mg)"), (3L, u"Iron (500mg)"))
composition_selection = forms.
MultipleChoiceField(widget=forms.CheckboxSelectMultiple,
choices=compositon_choices )

class Meta:
model = Product
fields = [
"title", "title_de", "title_es", "upc", "description",
"description_en_gb", "description_de",
"description_es", "is_discountable", "structure",
"unit_type", "product_concentration",]

widgets = {
"structure": forms.HiddenInput()
}

Dans l'exemple ci-dessus, j'ai étendu le ModelForm avec un MultipleChoiceField en ajoutant le champ composition_selection (cela fonctionne):

Je voudrais que composoition_selection soit une forme et non pas simplement un MultipleChoiceField:

class ProductComponentForm(forms.Form):
component_amount = forms.IntegerField()
component_name = forms.CharField()

et ensuite étendre le ModelForm avec cette nouvelle forme comme ceci:

class ProductForm(forms.ModelForm):
composition_selection = ProductComponentForm()

class Meta:
model = Product
fields = [
"title", "title_de", "title_es", "upc", "description",
"description_en_gb", "description_de",
"description_es", "is_discountable", "structure",
"unit_type", "product_concentration",]

widgets = {
"structure": forms.HiddenInput()
}

Mais je ne peux pas obtenir que cela fonctionne. Ce ProductForm que je veux créer n'est jamais rendu et rien ne s'affiche. Est-ce que je fais quelque chose de mal ou quelque chose manque? Quel serait le meilleur moyen d'étendre un ModelForm avec un SubForm?

Réponses:

0 pour la réponse № 1

Enfin je comprends ce que j'ai mal fait. Pour créer des sous-formulaires dans Django, vous avez besoin de jeux de formulaires. Dans mon cas, j'avais besoin de deux types de formulaires différents parce que j'avais deux relations différentes que je voulais changer d'une forme à l'autre.

  • relation un à plusieurs
  • relation plusieurs à plusieurs

En fonction du côté de la relation et du type de relation que l’on souhaite modifier à partir d’un seul formulaire, il existe différentes approches:

Il y a le inlineformset_factory: https://docs.djangoproject.com/el/1.10/topics/forms/modelforms/#inline-formsets . Ce type de formulaire est utilisé quand on veut éditer le beaucoup côté d'une relation un à plusieurs

Si l’on veut éditer l’un côté d’une relation un à plusieurs, la modelformset_factory est utilisé: https://docs.djangoproject.com/el/1.10/topics/forms/modelforms/#model-formsets

on peut créer un model_formset, puis ajouter ce formset au formet principal du formulaire principal.

quand on veut éditer une relation plusieurs à plusieurs dans un seul formulaire, une inline_formset_factory peut être créée avec la table intermédiaire de la relation plusieurs à plusieurs.

ce formset qui peut être ajouté au formulaire principal.

Pour mon cas d'utilisation que j'ai décrit ci-dessus, j'ai fini par utiliser un model_formset_factory et l'a ajouté à la fiche principale.