【问题标题】:ValueError at /akolaprofile/ The view akola.views.akolaprofile didn't return an HttpResponse object. It returned None instead/akolaprofile/ 处的 ValueError 视图 akola.views.akolaprofile 未返回 HttpResponse 对象。它返回 None 而不是
【发布时间】:2021-06-21 08:22:09
【问题描述】:

我正在尝试修改用户个人资料中的用户名。我没有使用 Django 的用户模型,而是通过继承 AbstractBaseUser 创建了一个自定义用户模型 (MyRegistration)。我还在settings.py 中将我的自定义用户模型分配给AUTH_USER_MODEL。但是当我尝试修改用户的个人资料详细信息时,它会抛出一个ValueError,说明视图akola.views.akolaprofile 没有返回HttpResponse 对象。它返回了None。可能有什么问题?

另外,我想了解为什么自从我创建自己的用户模型以来,is_valid() 函数每次都在抛弃我。它只是不能以任何形式工作。以下是我的代码:

models.py:

from django.db import models
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin
from django.utils import timezone
from .manager import FirstManager


#Making custom User model

class MyRegistration(AbstractBaseUser, PermissionsMixin):
    location_list=[
        ('Solapur', 'Solapur'),
        ('Latur', 'Latur'),
        ('Dhule', 'Dhule'),
        ('Akola', 'Akola'),
        ('Nashik', 'Nashik')
        ]
    username=models.CharField(max_length=10, unique=True)
    email=models.EmailField(unique=True)
    first_name=models.CharField(max_length=150)
    last_name=models.CharField(max_length=150)
    location=models.CharField(max_length=10, choices=location_list, default='Latur')
    designation=models.CharField(max_length=70)
    is_active=models.BooleanField(default=False)
    is_staff=models.BooleanField(default=False)
    start_date=models.DateTimeField(default=timezone.now)
    last_login=models.DateTimeField(null=True)


    USERNAME_FIELD='username'
    REQUIRED_FIELDS=['email', 'first_name', 'last_name', 'location', 'designation']
    objects=FirstManager()
    def __str__(self):
        return self.username

forms.py:

class ProfileForm(UserChangeForm):
    password=None
    class Meta:
        model=MyRegistration
        fields = ['username', 'first_name', 'last_name', 'email', 'location', 'designation', 'start_date', 'last_login']
        labels={'email': 'Email Address'}

views.py: 行号7这里,print(fm.is_valid())在终端返回True,代码还是返回None。

def akolaprofile(request):
    if request.user.is_authenticated:
        if request.method=='POST':
            print(request.POST)
            fm=ProfileForm(request.POST, instance=request.user)
            if fm.is_valid():
                print(fm.is_valid())
                fm.save()
            else:
                return HttpResponse('Not Valid!')
        else:
            nm=request.user.first_name
            fm=ProfileForm(instance=request.user)
            return render(request, 'akola/akolaprofile.html', {'form':fm, 'Name':nm})
    else:
        return HttpResponseRedirect('/login/')

urls.py:

from akola import views as ve

    path('akolaprofile/', ve.akolaprofile, name='akolaprofile'),
    ]

模板:

{% block content %}
    <div class="container" style="width: 65%; margin-top: 6%;">
        <div class="container" style="background-color: #4e7a7e; height: auto; width: auto; margin-top: 8%;">
            <div class="row">
                <div class="col-lg-12"></div>
            </div>
            <div class="row">
                <div class="col-lg-3" style="padding-top: 25px; padding-bottom: 20px; padding-left: 20px;">
                    <form action="" method="post" novalidate> {% csrf_token %}
                        {{form.username.label_tag}}
                </div>
                <div class="col-lg-3" style="padding-top: 25px; padding-bottom: 20px;">
                    {{form.username}}
                </div>
                <div class="col-lg-3" style="padding-top: 25px; padding-bottom: 20px; padding-left: 20px;">
                    {{form.first_name.label_tag}}
                </div>
                <div class="col-lg-3" style="padding-top: 25px; padding-bottom: 20px;">
                    {{form.first_name}}
                </div>
            </div>
            <div class="row">
                <div class="col-lg-3" style="padding-top: 25px; padding-bottom: 20px; padding-left: 20px;">
                    {{form.last_name.label_tag}}
                </div>
                <div class="col-lg-3" style="padding-top: 25px; padding-bottom: 20px;">
                    {{form.last_name}}
                </div>
                <div class="col-lg-3" style="padding-top: 25px; padding-bottom: 20px; padding-left: 20px;">
                    {{form.email.label_tag}}
                </div>
                <div class="col-lg-3" style="padding-top: 25px; padding-bottom: 20px;">
                    {{form.email}}
                </div>
            </div>
            <div class="row">
                <div class="col-lg-3" style="padding-top: 25px; padding-bottom: 20px; padding-left: 20px;">
                    {{form.designation.label_tag}}
                </div>
                <div class="col-lg-3" style="padding-top: 25px; padding-bottom: 20px;">
                    {{form.designation}}
                </div>
                <div class="col-lg-3" style="padding-top: 25px; padding-bottom: 20px; padding-left: 20px;">
                    {{form.start_date.label_tag}}
                </div>
                <div class="col-lg-3" style="padding-top: 25px; padding-bottom: 20px;">
                    {{form.start_date}}
                </div>
            </div>
            <div class="row">
                <div class="col-lg-3" style="padding-top: 25px; padding-bottom: 20px; padding-left: 20px;">
                    {{form.location.label_tag}}
                </div>
                <div class="col-lg-3" style="padding-top: 25px; padding-bottom: 20px;">
                    {{form.location}}
                </div>
                <div class="col-lg-3" style="padding-top: 25px; padding-bottom: 20px; padding-left: 20px;">
                    {{form.last_login.label_tag}}
                </div>
                <div class="col-lg-3" style="padding-top: 25px; padding-bottom: 20px;">
                    {{form.last_login}}
                </div>
            </div>
            
            <div class="row text-center">
                <div class="col-lg-12">
                    <input class="submitbtn" type="submit" value="Save">
                </div>
            </div>
            <div class="row">
                <div class="col-lg-12"></div>
            </div>
        </div>
    </div>
{% endblock content %}

【问题讨论】:

  • 表单有效时您没有返回响应...
  • @AbdulAzizBarkat 这工作..谢谢你的兄弟。 :)
  • @noob87 当你说is_valid() 不起作用时,你是什么意思?

标签: python django django-views django-forms


【解决方案1】:

您需要在表单保存时返回一些内容。目前所有的出口点都无法通过有效的形式访问。

def akolaprofile(request):
    if request.user.is_authenticated:
        if request.method=='POST':
            print(request.POST)
            fm=ProfileForm(request.POST, instance=request.user)
            if fm.is_valid():
                print(fm.is_valid())
                fm.save()
                return HttpResponse('Valid!')
            else:
                return HttpResponse('Not Valid!')

【讨论】:

  • 谢谢。 :) :)
【解决方案2】:
def akolaprofile(request):
    if request.user.is_authenticated:
        if request.method=='POST':
            print(request.POST)
            fm=ProfileForm(request.POST, instance=request.user)
            if fm.is_valid():
                print(fm.is_valid())
                fm.save()
                return HttpResponse('Valid response here!!!')
            else:
                return HttpResponse('Not Valid!')
        else:
            nm=request.user.first_name
            fm=ProfileForm(instance=request.user)
            return render(request, 'akola/akolaprofile.html', {'form':fm, 'Name':nm})
    else:
        return HttpResponseRedirect('/login/')

【讨论】:

  • 我做了那个兄弟,效果很好。顺便谢谢你。从现在开始会牢记这一点。 :)
猜你喜欢
  • 2020-11-01
  • 2019-06-12
  • 2018-06-02
  • 2020-08-19
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
  • 1970-01-01
  • 2020-12-03
相关资源
最近更新 更多