Передать модель из представления в внутренний мета-класс формы - PullRequest
0 голосов
/ 01 октября 2019

Я хочу передать конкретную модель из моего представления внутреннему метаклассу моей формы:

просмотр:

@login_required
def product_create_view(request):
    if request.method == 'POST':
        create_product_form = CreateProductForm(request.POST, request=request, model=model)
        if create_product_form.is_valid():
            create_product_form.save()
    else:
        create_product_form = CreateProductForm(request=request, model=model)
    return render(request, 'products/product_create.html', {'form': create_product_form})

форма:

class CreateProductForm(ModelForm):

    class Meta:
        model = CreateProductForm.model
        fields = (
            'title',
            'description',
            'price',
            'stock',
            'category'
        )

    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request')
        self.model = kwargs.pop('model')
        super().__init__(*args, **kwargs)

Этовозможно

1 Ответ

0 голосов
/ 01 октября 2019

Это не будет работать, так как форма с ее полями создается при загрузке файла. Вы, вероятно, можете переместить определение класса в функцию и определить его динамически.

@login_required
def product_create_view(request):

    class CreateProductForm(ModelForm):
        class Meta:
            model = model
            fields = (
                'title',
                'description',
                'price',
                'stock',
                'category'
            )

    if request.method == 'POST':
        create_product_form = CreateProductForm(request.POST, request=request)
        if create_product_form.is_valid():
            create_product_form.save()
    else:
        create_product_form = CreateProductForm(request=request)
    return render(request, 'products/product_create.html', {'form': create_product_form})

Хотя я еще не пробовал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...