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 }}