带条件的基于 Django 类的视图
Django Classbased views with condition
我在 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)
我尝试转换为基于类,但 return 不起作用。
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
也一样。您应该存储在 forms.py
中的必须是 YourForm
。但前提是你使用一些 django 的形式。否则使用 fields
属性。
另一件事是,当您实际使用 POST
时,您不应该从 GET
中获取值。您没有在基于函数的视图中这样做,没有理由在这里这样做。最后一件事,您应该使用 post
方法,或者在这种情况下,绝对使用 form_valid
,因为您只想更改模型的一个值。
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
因为它实际上改变了表单发布和发送到数据库的值。
你的模板 cs_form.html
你可以简单地渲染这样的表单:
{{ form }}
我在 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)
我尝试转换为基于类,但 return 不起作用。
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
也一样。您应该存储在 forms.py
中的必须是 YourForm
。但前提是你使用一些 django 的形式。否则使用 fields
属性。
另一件事是,当您实际使用 POST
时,您不应该从 GET
中获取值。您没有在基于函数的视图中这样做,没有理由在这里这样做。最后一件事,您应该使用 post
方法,或者在这种情况下,绝对使用 form_valid
,因为您只想更改模型的一个值。
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
因为它实际上改变了表单发布和发送到数据库的值。
你的模板 cs_form.html
你可以简单地渲染这样的表单:
{{ form }}