Передать аргумент в мета-класс Django Modelform - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть модели, которые имеют общие поля, такие как:

class Model_1(models.Model):
    field_1 
    field_2
    field_3
    # Other fields
class Model_2(models.Model):
    field_1 
    field_2
    field_3
    # Other fields

Затем я хочу создать одну форму для них обоих, как это:

class CommonForm(forms.ModelForm):
    class Meta:
         variable_of_name_of_model = that pass to Meta class
         # this condition check for 
         if  variable_of_name_of_model == 'Model_1':
             model = Model_1
         elif variable_of_name_of_model == 'Model_2':
             model = Model_2
         fields = ['field_1', 'field_2', 'field_3']

В этой форме я проверьте variable_of_name_of_model, который был передан классу Meta, и сделайте что-нибудь после этого.

Как я могу это сделать? С другой стороны, как я могу передать аргумент классу Meta?

1 Ответ

1 голос
/ 25 февраля 2020

Вы можете использовать вид метода Фабрика:

def get_form_class(model_name,data, instance):
    class CommonForm(forms.ModelForm):
        class Meta:
            model = model_name
            fields = ['field_1', 'field_2', 'field_3']
        form = CommonForm(data=data, instance=instance)
        return form

Просто назовите его так, чтобы название модели было там, где вы хотели бы его использовать (просмотры?). Как то так:

form = get_form_class(model_name=ModelName, data=request.POST, instance=instance,)
...