2015-07-20 77 views
0

serializers.py:AttributeError的:在/ '用戶' 對象有沒有屬性 '標準'

from django.forms import widgets 
from rest_framework import serializers 
from .models import Classname, Sectionname, Teachername, Attendancename 
from django.contrib.auth.models import User 


class UserSerializer(serializers.HyperlinkedModelSerializer): 
    standard = serializers.PrimaryKeyRelatedField(many=True, queryset=Classname.objects.all()) 
    section = serializers.PrimaryKeyRelatedField(many=True, queryset=Sectionname.objects.all()) 
    teacher = serializers.PrimaryKeyRelatedField(many=True, queryset=Teachername.objects.all()) 
    attend = serializers.PrimaryKeyRelatedField(many=True, queryset=Attendancename.objects.all()) 

    class Meta: 
     model = User 
     fields = ('id', 'username', 'standard', 'section', 'teacher', 'attend',) 
#when I'm attempting to add 'standard' field it raises above exception. 

class ClassSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Classname 
     fields = ('id', 'class_name',) 

class SectionSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Sectionname 
     fields = ('id', 'class_name', 'section_name') 

class TeacherSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Teachername 
     fields = ('id', 'classname', 'secname', 'teachname') 

class AttendanceSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Attendancename 
     fields = ('id', 'teacher_name', 'date', 'intime', 'outtime') 

我回溯:

Environment: 


Request Method: GET 
Request URL: http://127.0.0.1:8000/stu/users/ 

Django Version: 1.8.3 
Python Version: 3.4.3 
Installed Applications: 
('django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'rest_framework', 
'student') 
Installed Middleware: 
('django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware', 
'django.middleware.security.SecurityMiddleware') 


Traceback: 
File "C:\Users\User\demo\venv\lib\site-packages\django\core\handlers\base.py" in get_response 
    132.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "C:\Users\User\demo\venv\lib\site-packages\django\views\decorators\csrf.py" in wrapped_view 
    58.   return view_func(*args, **kwargs) 
File "C:\Users\User\demo\venv\lib\site-packages\django\views\generic\base.py" in view 
    71.    return self.dispatch(request, *args, **kwargs) 
File "C:\Users\User\demo\venv\lib\site-packages\rest_framework\views.py" in dispatch 
    456.    response = self.handle_exception(exc) 
File "C:\Users\User\demo\venv\lib\site-packages\rest_framework\views.py" in dispatch 
    453.    response = handler(request, *args, **kwargs) 
File "C:\Users\User\demo\venv\lib\site-packages\rest_framework\generics.py" in get 
    199.   return self.list(request, *args, **kwargs) 
File "C:\Users\User\demo\venv\lib\site-packages\rest_framework\mixins.py" in list 
    47.   return Response(serializer.data) 
File "C:\Users\User\demo\venv\lib\site-packages\rest_framework\serializers.py" in data 
    622.   ret = super(ListSerializer, self).data 
File "C:\Users\User\demo\venv\lib\site-packages\rest_framework\serializers.py" in data 
    217.     self._data = self.to_representation(self.instance) 
File "C:\Users\User\demo\venv\lib\site-packages\rest_framework\serializers.py" in to_representation 
    572.    self.child.to_representation(item) for item in iterable 
File "C:\Users\User\demo\venv\lib\site-packages\rest_framework\serializers.py" in <listcomp> 
    572.    self.child.to_representation(item) for item in iterable 
File "C:\Users\User\demo\venv\lib\site-packages\rest_framework\serializers.py" in to_representation 
    430.     attribute = field.get_attribute(instance) 
File "C:\Users\User\demo\venv\lib\site-packages\rest_framework\relations.py" in get_attribute 
    367.   relationship = get_attribute(instance, self.source_attrs) 
File "C:\Users\User\demo\venv\lib\site-packages\rest_framework\fields.py" in get_attribute 
    71.     instance = getattr(instance, attr) 

Exception Type: AttributeError at /stu/users/ 
Exception Value: 'User' object has no attribute 'standard' 

我按照DRF的教程。我想在上面的'UserSerializer'中添加所有與我的模型相關的主鍵參考,但它會引發超出上述例外。

由於我有四個模型,所以我已經在'UserSerializer'類中取得了四個單獨的變量,並嘗試將其顯示到用戶API中。

我做錯了什麼?請提供您的建議......

在此先感謝....

+3

您正在接觸默認的Django用戶,默認用戶沒有您在UserSerializer類中指定的屬性,如果您有自定義用戶模型,請使用'get_user_model()'函數引用您的自定義模型。如果沒有,那麼你需要創建適當的模型或關係。 – petkostas

回答

1

默認User模型沒有在其定義的屬性standard。在Django的User模型中定義

字段有:

  1. 用戶名
  2. FIRST_NAME
  3. 姓氏
  4. 電子郵件
  5. 密碼
  6. user_p ermissions
  7. is_staff
  8. IS_ACTIVE
  9. is_superuser
  10. LAST_LOGIN
  11. date_joined

您的代碼不工作,因爲沒有在User模型中定義不standard場。

您可以改爲擴展User模型,然後將額外的standard字段添加到該自定義用戶模型中。

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

class CustomUser(AbstractUser): 

    standard = models.CharField() # add the 'standard' field 

然後在您的設置中,您需要將其指定爲用戶模型。

AUTH_USER_MODEL = 'my_app.models.CustomUser' 

可以使用get_user_model()函數將返回當前活動的用戶模型即CustomUser模型。

1

我有這個完全相同的問題。當您在Classname模型上創建ForeignKey時需要提供related_name,然後在序列化程序上創建反向關係時,應該使用related_name作爲序列化程序中變量的名稱。例如:

class Classname(models.Model): 
    user = ForeignKey(User, related_name='standard') 

class UserSerializer(serializers.HyperlinkedModelSerializer): 
    standard = serializers.PrimaryKeyRelatedField(many=True, queryset=Classname.objects.all()) 

    class Meta: 
     model = User 
     fields = ('id', 'username', 'standard', 'section', 'teacher', 'attend',) 

Here是相關文檔。

相關問題