首页 > 解决方案 > 如何从 Django CreateView 检索表单数据?

问题描述

我有一个 Django 博客,用户可以在其中设置每个帖子的状态(活动、非活动)。我正在使用 Django 的基于类的通用视图,并且希望仅在状态设置为“活动”时将用户重定向到他们创建的帖子,否则他们应该被重定向到主页。如何从表单中检索此提交的信息以创建 if 语句?例如:如果状态 == "a"...

视图.py

from .models import Listing
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.messages.views import SuccessMessageMixin
from django.views.generic import CreateView

class PostCreateView(LoginRequiredMixin, SuccessMessageMixin, CreateView):
    model = Post
    fields = ['title', 'status', 'content']
    template_name = 'blog/post-form.html'
    success_message = 'Your post has been created.'

    def form_valid(self, form):
        form.instance.user = self.request.user
        return super().form_valid(form)

标签: pythondjangodjango-formsdjango-views

解决方案


我认为“重定向”在方法(form_valid)中无效,因此您绝对应该放置类似 def post 的内容,并在 request.data 中获取值。我将尝试向您展示在生产中为我工作的代码。你让我知道这是否是正确的反应。

类 LoginFormView(FormInvalidMessageMixin,LoginView):

template_name = "clientes/login.html

def post(self, request, *args, **kwargs):
    username = self.request.POST.get('username')
    password = self.request.POST.get('password')
    tipo_cuenta = self.request.POST.get('tipo-cuenta')
    tipo_cuenta = tipo_cuenta.strip()

    user = authenticate(username=username, password=password)

    if user:
        if has_group(user, 'admin'):
            messages.success(request, _('Not for admin'))
            return redirect('/login')

        cliente = Usuario.objects.filter(usuario=user).first()
        sucursal = Sucursal.objects.filter(usuario=user).first()
        empleado = Empleado.objects.filter(usuario=user).first()

        if tipo_cuenta == 'Punto afiliado':
            login(self.request, user)
            return redirect('/envios')

推荐阅读