Django Представления на основе классов с условием

Я создал скрипт в функциональном представлении в django и хочу преобразовать его в представление на основе класса с условием if/else. Я искал, но не нашел решения. Извините за простой вопрос, я новичок в django и начинаю учиться.

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

def vm_create(request):
    if request.method == 'POST':
        Number = request.POST.get('number')
        Date = request.POST.get('date')

        if Date == '':
            Date = None
        else:
            Date = datetime.datetime.strptime(or_date,'%Y-%m-%d')

        month = ''
        endnum = ''
        if Number != '':
            endnum = int(Number[-1])
            if endnum == 1:
                month = 'January'
            elif endnum == 2:
                month = 'Febuary'
     save = Models(CS_Number=Number, CS_Date=Date, CS_Month=month)

Я пытался преобразовать в classbased, но возврат не работает.

class vm_create(CreateView):
    model = models
    form_class = forms
    template_name = 'cs_form.html'
    def create_new(self, request, *args, **kwargs):
        endnum = ''
        if request.GET.get('Number') != '':
            endnum = int(Number[-1])
            if endnum == 1:
                return 'January'
            elif endnum == 2:
                return 'Febuary'
        return super().create_new(request, *args, **kwargs)

Для начала, ваш model должен быть YourObjectModel, вы не должны передавать туда models. То же самое с form_class. Это должно быть YourForm, которое вы должны хранить в forms.py. Но только если вы используете какую-то форму django. В противном случае используйте атрибут fields.

Другой момент заключается в том, что вы не должны получать значения из GET, когда вы фактически используете POST. Вы не делали этого в своем представлении, основанном на функциях, нет причин делать это здесь. И последнее, вы должны работать с методом post или, в данном случае, определенно с form_valid, так как вы хотите изменить только одно значение Model.

views.py:

from your_app.models import YourObjectModel

class vm_create(CreateView):
    model = YourObjectModel
    fields = '__all__'
    template_name = 'cs_form.html'

    def form_valid(self, form):
        # This method is called when valid form data has been POSTed.

        if form.instance.CS_Number != '':
            endnum = int(form.instance.CS_Number[-1])
            if endnum == 1:
                form.instance.CS_Month = 'January'
            elif endnum == 2:
                form.instance.CS_Month = 'February'

        return super().form_valid(form)

Важно использовать реальные имена полей (как я полагаю, у вас в модели, т.е. CS_Number) с form.instance, потому что это фактически изменяет значения из формы POSTing и отправки в базу данных.

В вашем шаблоне cs_form.html вы можете просто отобразить такую форму с:

{{ form }}
Вернуться на верх