带条件的基于 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,你不应该超过 modelsform_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 }}