【问题标题】:Attribute user.grade cannot be referenced in Django template属性 user.grade 不能在 Django 模板中引用
【发布时间】:2015-10-30 23:45:32
【问题描述】:

我有一些我正在构建的网站的代码。

在我的views.py 中,我有以下代码:

                    from django.shortcuts import render
                    from django.http import HttpResponse, HttpResponseRedirect
                    from django.conf.urls import url
                    from .models import UserInfo, Events
                    from django import forms
                    from .forms import RegisterForm, LoginForm, OrderForm
                    from django.contrib.auth.models import User
                    from django.shortcuts import redirect
                    from django.views.decorators.csrf import csrf_exempt
                    from django.contrib.auth import authenticate, login, logout
                    # Create your views here.

                    def home(request):
                        return render(request, 'student/index.html')

                    @csrf_exempt
                    def signin(request):
                        print "login"
                        if request.method == 'POST':
                            form = LoginForm(request.POST)
                            username = request.POST['username']
                            password = request.POST['password']
                            print "input username ", username
                            try:
                                if form.is_valid():
                                    user = authenticate(username=username, password=password)
                                    if user is not None:
                                        print "user not none"
                                        print user.username
                                        print user.email
                                        login(request,user)
                                        return redirect("/")
                                    else:
                                        print "login failed"
                                        raise forms.ValidationError({'username':['Invalid username/password']})
                                else:
                                    print form.errors
                            except:
                                raise


                        else:
                            print "hello"
                            form = LoginForm()

                        return render(request, 'student/login.html', {'form': form})

                    @csrf_exempt
                    def signup(request):
                        print "signup"
                        if request.method == 'POST':
                            print "post signup"
                            form = RegisterForm(request.POST)
                            try:
                                if form.is_valid():
                                    print form.cleaned_data
                                    u = User.objects.create_user(form.cleaned_data['emailid'], form.cleaned_data['emailid'], form.cleaned_data['passwd1'] )

                                    ui = UserInfo()
                                    ui.user = u
                                    ui.class_of = form.cleaned_data['gradyear']
                                    ui.grade = form.cleaned_data['grade']
                                    ui.balance = 0

                                    ui.save()
                                    user = authenticate(username=form.cleaned_data['emailid'], password=form.cleaned_data['passwd1'])
                                    login(request,user)
                                    print "after login in signup"
                                    return redirect("/")


                                else:
                                    print "error"
                                    print form.errors
                            except:
                                raise
                                print "error here"
                                print form.errors
                                pass
                                #return render(request, 'student/register.html', {'form': form})

                        else:
                            form = RegisterForm()

                        return render(request, 'student/register.html', {'form': form})

                    def forgotpassword(request):
                        if request.method == 'POST':
                            form = LoginForm(request.POST)
                            if form.is_valid():
                                # process the data in form.cleaned_data as required
                                # ...
                                # redirect to a new URL:

                                print form.cleaned_data
                                return HttpResponseRedirect('/thanks/')
                            else:
                                print "INVALID"
                                print form.errors
                        else:
                             form = LoginForm()
                        return render(request, 'student/forgotpassword.html')


                    def studentinfo(request):
                        return render(request, 'student/studentinfo.html', {} )

                    def error(request):
                        return render(request, 'student/LoginError.html', {} )

                    def site_logout(request):
                        logout(request)
                        return redirect("/")
                        #return render(request, 'student/studentinfo.html', {} )

                    def order(request):
                        if request.method == 'POST':
                            form = 0
                        return render(request, 'student/orderform.html')

                    def dashboard(request):
                        user = request.user
                        return render(request, 'student/dashboard.html', {'user': user})

                    def blog(request):
                        return render(request, 'student/blog.html')

这是我的models.pyUserInfo 是:

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

class UserInfo(models.Model):
    user = models.ForeignKey(User)
    class_of = models.IntegerField()
    #username = user.username
    #fname = user.first_name
    #lname = user.last_name
    #email = user.email
    #Staff = user.is_staff
    pub_date = models.DateTimeField( auto_now=True)
    grade = models.IntegerField()
    balance = models.DecimalField(max_digits=6, decimal_places=2)

class Events(models.Model):
    name = models.CharField(max_length = 80)
    date = models.DateTimeField()
    cost = models.DecimalField(max_digits = 6, decimal_places = 2)
    def __unicode__(self):
        return str(self.name)
# Create your models here.

在我使用 Django 模板语言的 HTML 代码中,{{ user.username }}{{ user.email }} 完美显示,但为什么 {{ user.grade }} 不能以同样的方式工作?

【问题讨论】:

  • 在这种情况下,您调用的是哪个视图?如果我们没有关于它的应用程序的上下文,给我们你所有的视图代码是没有用的。

标签: python django templates inheritance


【解决方案1】:

grade 不是 Django 的 User 模型的属性而是UserInfo 的属性,你需要使用类似:

{{ user.user_infos.grade }}

user_infos 是模型中的related_name(应该是OneToOneField 对吧?):

user = models.OneToOneField(User, related_name='user_infos')

【讨论】:

  • 没问题 :) @doniyor
  • 我会在哪里添加这个?在我的models.py中? @doniyor
  • @AbhishekPatel 是的,在您的模型中,您只需将 userinfo 模型中的 user = .. 行替换为上面的行,当然还有 makemigrationsmigrate
  • 非常感谢!我想为已注释掉的 fname 执行此操作。但是当我取消注释时,它说“'OnetoOneField' 对象没有属性'first_name'”我该如何解决这个问题? @doniyor
  • @AbhishekPatel 您不能在模型定义中使用fname = user.first_name。你甚至不需要它,因为你总是可以通过 user.first_name 获得名字
猜你喜欢
  • 1970-01-01
  • 2019-09-03
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多