未在temp中获取模型窗体值

2024-10-01 15:39:31 发布

您现在位置:Python中文网/ 问答频道 /正文

Django用户配置文件模型表单数据没有显示在模板上,甚至没有给我一个错误!你知道吗

我正在学习用用户配置文件模型创建Django注册表格我已经成功创建了注册表格和配置文件表格,但是我没有从中获得任何值型号.py文件。你知道吗

型号.py

class ExtenduserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    birth_date = models.DateField(null=True, blank=True)
    age = models.IntegerField()

   def __str__(self):
      return self.user.username

@receiver(post_save,sender=User)
def create_profile(sender, **kwargs):
    if kwargs['created']:
         user_profile = 
          ExtenduserProfile.objects.create(user=kwargs['instance'])

post_save.connect(create_profile, sender=User)

表单.py

class userprofile(forms.ModelForm):
   birth_date = forms.DateField(help_text='Required. Format: YYYY-MM-DD')
    class Meta:
        model = ExtenduserProfile
        fields = ('age','birth_date')

视图.py

@login_required()
def UserProfile(request,pk=None):
     profile = ExtenduserProfile.objects.all()
     return render(request,'dashboard/profile.html',{'profile':profile})


 @login_required()
 def HomeScreen(request):
     if request.user.is_authenticated:
           username = request.user.username
     else :
           username = 'not logged in'
     context = {'username':username,'user':user}
     return render(request,'dashboard/Home.html',context)


  def singup(request):
      if request.method == 'POST':
           form = SignupForm(request.POST)
           user_profile = userprofile(request.POST)

           if form.is_valid() and user_profile.is_valid():
              user = form.save()
              profile = user_profile.save(commit=False)
              profile.user = user
              profile.save()

              username = form.cleaned_data.get('username')
              password = form.cleaned_data.get('password')
              user = authenticate(username = username, password = password)
             login(request,user)
             return redirect(login_view)

        else:
             form = SignupForm()
             user_profile = userprofile()

         context = {'form':form, 'user_profile':user_profile }
         return render(request,'account/signup.html',context)

HTML文件

  {% extends 'dashboard/base.html' %}

 <html lang="en" dir="ltr">
  <head>
   <meta charset="utf-8">
    <title>Profile</title>
    </head>
     {% block content%}
     <body>
     <h3>Welcome to profile page</h3><br>

      {% if user.is_authenticated %}
      <h4>Name = {{user.first_name}} {{user.last_name}}</h4>
      <h4>Email = {{user.email}}</h4>
      <h4>Age = {{user.ExtenduserProfile.age}} </h4>
      <h4>DOB = {{user.ExtenduserProfile.birth_date}} </h4>
      {% endif %}
      </body>
      {% endblock%}
     </html>

我的预期产出应该是 名称:xyz 电子邮件:abc@abc.com 年龄:24岁 出生日期:1994-04-21


Tags: pyformreturnifmodelsrequestsavedef
2条回答

什么是扩展AbstractUser的自定义用户模型?

它是从AbstractUser继承的一种新的用户模型。它需要特别小心,并通过设置.py. 理想情况下,应该在项目开始时完成,因为这将极大地影响数据库模式。在实施过程中要格外小心。你知道吗

什么时候应该使用自定义用户模型?

当您对Django处理身份验证过程的方式非常满意并且不会对其进行任何更改时,应该使用它。但是,您希望直接在用户模型中添加一些额外的信息,而不必创建额外的类。你知道吗

我建议你使用抽象用户

对你的案子来说,哪一个更容易和最好的做法

from django.db import models
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
   bio = models.TextField(max_length=500, blank=True)
   location = models.CharField(max_length=30, blank=True)
   birth_date = models.DateField(null=True, blank=True)

同时将此项添加到您的设置中:

AUTH_USER_MODEL = 'appname.User'

有关详细信息,请查看此tutorial

好吧,当您在OneToOne中使用反向关系时,类名应该全部小写(^{})。例如:

<h4>Age = {{user.extenduserprofile.age}} </h4>
<h4>DOB = {{user.extenduserprofile.birth_date}} </h4>

另外,为什么要从概要视图通过上下文将profile = ExtenduserProfile.objects.all()发送到模板?因为正如我所见,你没有使用它。所以我认为你也可以删除这部分代码。你知道吗

此外,还可以从模板中删除{% if user.is_authenticated %}{%endif%}。因此,除非您登录,否则无法访问此模板。您已经通过login_required装饰器限制了它。你知道吗

相关问题 更多 >

    热门问题