【问题标题】:How do I show model field values in HTML page, in Django for this particular case?对于这种特殊情况,如何在 Django 中的 HTML 页面中显示模型字段值?
【发布时间】:2021-04-19 00:15:41
【问题描述】:

我需要在个人资料页面上显示用户的详细信息。但是在以下情况下,我无法在我的个人资料页面上呈现电话号码和标志(SpecialUser 模型的属性)。我被要求在 Django auth 中为应用程序的用户模型实现扩展模型。我介绍了 2 个新字段,即 phonenumber(charfield)、flag(booleanfield)。我的表单能够同时接受这两个输入。但是我无法将这些值再次呈现到我的 HTML 文件中。谁能帮帮我!

models.py

# accounts.models.py
from django.db import models
from django.contrib.auth.models import User


class SpecialUser(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    flag = models.BooleanField(verbose_name="Special User", default=False)
    phonenumber = models.CharField(max_length=10, verbose_name="phonenumber")

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

forms.py

from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from .models import SpecialUser


class RegisterForm(UserCreationForm):
    email = forms.EmailField()

    class Meta:
        model = User
        fields = ["username", "email", "password1", "password2"]


class SuperUserForm(forms.ModelForm):
    class Meta:
        model = SpecialUser
        fields = ["flag", "phonenumber"]

views.py

from accounts.models import SpecialUser
from django.shortcuts import render, redirect
from .forms import RegisterForm, SuperUserForm
from django.contrib import messages
from django.contrib.auth.models import auth


def register(request):
    if request.method == 'POST':
        form = RegisterForm(request.POST)
        sp_form = SuperUserForm(request.POST)
        if form.is_valid() and sp_form.is_valid():
            user = form.save()
            sp_form = sp_form.save(commit=False)
            sp_form.user = user
            sp_form.save()
            messages.success(request, 'Account created!')
            return redirect('login')

    else:
        form = RegisterForm(request.POST)
        sp_form = SuperUserForm(request.POST)
        messages.warning(request, 'Your account cannot be created.')
    return render(request, 'register.html', {'form': form, 'sp_form': sp_form})


def login(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = auth.authenticate(username=username, password=password)

        if user is not None:
            auth.login(request, user)
            data = SpecialUser.objects.all()
            dt = {"all": data}
            return render(request, "profilepage.html", dt)
        else:
            messages.info(request, 'invalid credentials')
            return redirect('login')
    else:
        return render(request, 'login.html')


def logout(request):
    auth.logout(request)
    return redirect('login')

profilepage.html

<h1>{{user.username}}</h1>
<h4>Email : {{user.email}}</h4>
<h5>Phone Number : {{all.phonenumber}}</h5>
{%if user.flag %}
<button>Special User</button>
{%endif%}

【问题讨论】:

    标签: python django django-models django-views django-templates


    【解决方案1】:

    这是查看数据所需的正确 html

        {%for d in all%}    
        {%ifequal d.user user%}
        <h1>{{d.user.username}}</h1>
        <h4>Email : {{d.user.email}}</h4>
    
          <h5>Phone Number : {{d.phonenumber}}</h5>
          {%if d.flag %}
            <button>Special User</button>
          {%endif%}
        {%endifequal%}
        {%endfor%}
    

    【讨论】:

    • 感谢您的帮助!有效。但它正在呈现所有用户的详细信息。我只需要授权用户的详细信息。
    • 授权用户是什么意思?你是说特殊用户?
    • 我的意思是当有人登录时,应该只呈现他们的详细信息。我为此使用了 if 条件 {%ifequal d.user user%}。但是感谢您的解决方案!
    猜你喜欢
    • 2015-04-23
    • 2014-09-17
    • 2019-01-27
    • 2013-04-20
    • 2020-09-30
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多