Как работать с инлайн-формами администратора в Django crispy-forms
Я столкнулся с проблемой при использовании crispy-forms. У меня есть поля, которые я отображаю через crispy layout.
class OptionOfProductInline(admin.TabularInline):
form = OptionOfProductInlineForm
model = OptionOfProduct
extra = 1
class ProductForm(forms.ModelForm):
class Meta:
model = Product
fields = "__all__"
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_id = 'id-exampleForm'
self.helper.form_class = 'blueForms'
self.helper.form_method = 'post'
self.helper.form_action = 'submit_survey'
self.helper.form_tag = False
self.helper.layout = Layout(
TabHolder(
Tab("Основні налаштування",
HTML("<div class='tab_name'>Основні налаштування</div>"),
Div(
Div("article", "price", css_class='two_in_line'),
Div(Div(HTML(_("<div>Availability</div>")), "availability", css_class="form-group"), "percent_sale", css_class='two_in_line'),
Div("qty", "date_start_sale", css_class='two_in_line'),
Div("unit_fk", "date_end_sale", css_class='two_in_line'),
Div(Div(HTML(_("<div>Publish</div>")), "publish", css_class="form-group"), "order", css_class='two_in_line'),
css_class="left_side"),
Div(
Div("image"),
Div("qty_min_order"),
Div("brand_fk"),
Div("category_fk"),
Div("show_in_categories"),
css_class="right_side"),
css_class="two_cols"),
Tab("SEO",
HTML("<div class='tab_name'>SEO</div>"),
Div(
Div(*name, css_class='column_fields'), Div(*slug, css_class='column_fields'), Div(*h1, css_class='two_in_line'), Div(*title, css_class='row_fields'),
Div(*meta_description, css_class='field_description'), Div(*description, css_class='field_description'), css_class='name_slug'),
css_class="center_side",
),
),
)
@admin.register(Product)
class ProductAdmin(TabbedTranslationAdmin):
form = ProductForm
add_form_template = "admin/my_form.html"
change_form_template = "admin/my_form.html"
Поля выглядят как на этом скриншоте: https://i.imgur.com/lLL2G23.jpg.
Вкладка "Inline" должна содержать наборы форм, которые выглядят как на этом скриншоте: https://i.imgur.com/nKOntVV.jpg и я хочу вывести этот набор форм через Layout.
Я пытался вывести вот так, но ничего не получилось :(
)Tab("Inline", OptionOfProductInline, css_class="some_class",)
OptionOfProduct и OptionOfProductInlineForm:
class OptionOfProduct(models.Model):
product_fk = models.ForeignKey(Product, on_delete=models.CASCADE, null=True, blank=True)
option_value_mtm = models.ManyToManyField(OptionValue, null=True, blank=True)
article = models.CharField(verbose_name=_('article'), null=True, blank=True, max_length=255)
price = models.DecimalField(verbose_name=_('price'), null=True, blank=True, decimal_places=2, max_digits=9, default=0.00)
qty = models.IntegerField(verbose_name=_('qty'), default=0)
class OptionOfProductInlineForm(ModelForm):
option_value_mtm = forms.ModelMultipleChoiceField(queryset=OptionValue.objects.all(), required=False, widget=CustomSelectWidget)
class Meta:
model = OptionOfProduct
fields = '__all__'
exclude = None