/ / Як додати форму як атрибут поля у django ModelForm - python, django, django-models, django-form

Як додати форму як атрибут поля в django ModelForm - python, django, django-models, django-form

У мене є 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()
}

Але я не можу змусити це працювати. Ця продуктова форма, яку я хочу створити, ніколи не видається, і нічого не з’являється. Я щось роблю неправильно чи щось пропускаю? Що було б найкращим способом розширити ModelForm за допомогою SubForm?

Відповіді:

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 і додав його до основної форми.