Django Create View параметры в форме

У меня Джанго generic create view

class TestCreateView(CreateView):
    form_class = TestCreateForm

##forms.py
class TestCreateForm(forms.ModelForm):
    class Meta:
        model = Test

    def __init__(self, user, *args, **kwargs):
        super(TestCreateForm).__init__(*args, **kwargs)
        self.fields['test_field'] = Testing.objects.filter(user=user)

В представлениях на основе функций я бы сделал так:

form = TestCreateForm(request.user)

Теперь в представлении на основе общего класса мне нужно перезаписать методы get и post только для этого?


person pynovice    schedule 10.05.2014    source источник
comment
Вы должны проверить CreateView на CCBV. Это хороший справочник для поиска того, что доступно в представлениях на основе классов Django. Я надеюсь, что вы найдете это полезным. Полное раскрытие: я написал этот инструмент.   -  person meshy    schedule 10.05.2014


Ответы (1)


Поскольку вам нужно добавить аргумент в init (каждый раз, когда вы создаете экземпляр формы), вы можете переопределить get_form_kwargs из класса CreateView:

class TestCreateView(CreateView):
form_class = TestCreateForm

    def get_form_kwargs(self):
        kwargs = {
            'initial': self.get_initial(),
            'prefix': self.get_prefix(),
            'user': self.request.user
        }

        if self.request.method in ('POST', 'PUT'):
            kwargs.update({
                'data': self.request.POST,
                'files': self.request.FILES,
            })
        return kwargs
person Viktor eXe    schedule 09.08.2017