/ / Как да добавим форма като поле атрибут в django ModelForm - питон, django, django-модели, django-form

Как да добавите формуляр като атрибут на полето в django ModelForm - python, django, django-models, django-forms

Имам ModelForm за обект, създаден по следния начин:

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()
}

В примера по-горе разширих ModelForm с MultipleChoiceField чрез добавяне на поле за избор на композиция (това работи):

Бих искал composoition_selection да бъде форма, а не просто MultipleChoiceField:

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

и след това разширете ModelForm с тази нова форма като тази:

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()
}

Но не мога да накарам това да работи. Този ProductForm, който искам да създам, никога няма да бъде визуализиран и нищо не се появява. Правя ли нещо нередно или липсва нещо? Какво би било най-добрият начин за разширяване на ModelForm с подформа?

Отговори:

0 за отговор № 1

Накрая разбирам какво съм направил погрешно. За да се правят подформи в Django се нуждаят от форми. В моя случай имах нужда от два различни вида форми, защото имах две различни отношения, които исках да променя от една форма.

  • една към много отношения
  • много за много отношения

в зависимост от това коя страна на връзката и кой тип връзка иска да редактира в рамките на една форма, има различни подходи:

Налице е inlineformset_factory: https://docs.djangoproject.com/el/1.10/topics/forms/modelforms/#inline-formsets , Този тип формуляр се използва, когато искате да редактирате много от една към много отношения

Ако някой иска да редактира едната страна на едно към много отношения Използва се modelformset_factory: https://docs.djangoproject.com/el/1.10/topics/forms/modelforms/#model-formsets

може да се създаде model_formset и след това да се добави тази форма към основната форма на основната форма.

когато човек иска да редактира много от много отношения в една единствена форма, може да се създаде inline_formset_factory с междинната таблица на връзката много към много.

тази форма, отколкото може да се добави към основната форма.

За моя случай, който описах по-горе, в крайна сметка използвах model_formset_factory и добавих, че към основната форма.