首页 > 解决方案 > 模型属性显示字段的默认值而不是实际值

问题描述

我是 Django 初学者,我开始着手我的第一个项目。我实现了一个带有 medic_code 字段的模型“extendedUser”,扩展了用户。在模板中显示 medic_code 似乎是一个问题。它不显示用户的实际属性,而是默认值:“”。

模板

{% extends "blog/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
    <div class="content-section">
      <div class="media">
        <img class="rounded-circle account-img" src="{{ user.profile.image.url }}">
        <div class="media-body">
          <h2 class="account-heading">{{ user.username }}</h2>
           <p class="text-secondary">{{ user.email }} </p>
           <p class="text-secondary">{{ user.medic_code }}</p> (empty string here)
        </div>
      </div>
      <!-- FORM HERE -->
    </div>
{% endblock content %}

模型.py:

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

class extendedUser(User):
    medic_code = models.CharField(max_length=20, default='')

用户/forms.py:

from django import forms
from django.contrib.auth.forms import UserCreationForm
from users.models import extendedUser


class UserRegisterForm(UserCreationForm):
    email = forms.EmailField()
    medic_code = forms.CharField(max_length=20)
    class Meta:
        model = extendedUser
        fields = ['username', 'email', 'medic_code', 'password1', 'password2']

视图.py:

from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from .forms import UserRegisterForm

def register(request):
    if request.method == 'POST':
        form = UserRegisterForm(request.POST)
        if form.is_valid():
            user = form.save()
            #user.refresh_from_db()
            user.medic_code = form.cleaned_data.get('medic_code')
            user.save()
            username = form.cleaned_data.get('username')
            messages.success(request, f'Your account has been created! You are now able to log in! Your medic code {user.medic_code}') #correct value displayed here
            return redirect('login')
    else:
        form = UserRegisterForm()
    return render(request, 'users/register.html', {'form': form})


@login_required
def profile(request):
    user = request.user
    return render(request, 'users/profile.html', {'user':user})

此外,在我创建用户并在 Django shell 中为该用户显示 medic_code 字段后,将显示正确的值。可能有什么问题?

谢谢!

标签: djangotemplatesauthentication

解决方案


推荐阅读