简体   繁体   中英

How do I show model field values in HTML page, in Django for this particular case?

I need to display the details of the user on the profilepage. But in the following situation, I am unable to render phone number and flag(attributes of SpecialUser model) on my profile page. I was asked to implement an extended model for the User model in Django auth for an application. I introduced 2 new fields ie, phonenumber(charfield), flag(booleanfield). My form is able to take both the inputs. But I couldn't render these values again into my HTML file. Could someone help me out!

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%}

here is the correct html you need to see your data

    {%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%}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM