2015-03-02 26 views
4

我遵循django-rest-framework教程,我無法弄清楚這裏發生了什麼。Django-rest-framework教程4中的AttributeError認證

我創建了一個UserSerializer類與片斷屬性,我做了所有的進口

#--!-coding: utf-8 
from rest_framework import serializers 
from snippets.models import Snippet 
from django.contrib.auth.models import User 

class SnippetSerializer(serializers.ModelSerializer): 
    owner = serializers.ReadOnlyField(source='owner.username') 

    class Meta: 
     model = Snippet 
     fields = ('id', 'title', 'code', 'linenos', 'language', 'style', 'owner') 

class UserSerializer(serializers.ModelSerializer): 
    snippets = serializers.PrimaryKeyRelatedField(many=True, queryset=Snippet.objects.all()) 

    class Meta: 
     model = User 
     fields = ('id', 'username', 'snippets') 

然後我創建了UserList的和的UserDetails觀點:

class UserList(generics.ListAPIView): 
    queryset = User.objects.all() 
    serializer_class = UserSerializer 

class UserDetail(generics.RetrieveAPIView): 
    queryset = User.objects.all() 
    serializer_class = UserSerializer 

和我我幾乎按照教程,但當我嘗試訪問其中一個用戶端點時,我得到一個AttributeError

AttributeError at /users/ 

'User' object has no attribute 'snippets' 

我使用Django 1.7.5和Django的其餘框架3.0.5

我不知道這是否是這個特定版本的問題。

編輯:

這是我的模型:

class Snippet(models.Model): 
    created = models.DateTimeField(auto_now_add=True) 
    title = models.CharField(max_length=100, blank = True, default='') 
    code = models.TextField() 
    linenos = models.BooleanField(default=False) 
    language = models.CharField(choices=LANGUAGE_CHOICES, default='python', max_length=100) 
    style = models.CharField(choices=STYLE_CHOICES, default='friendly', max_length=100) 
    owner = models.ForeignKey('auth.User') 
    highlighted = models.TextField() 

    class Meta: 
     ordering = ('created',) 

    def save(self, *args, **kwargs): 
     """ 
     Usa o a biblioteca pygments para criar um representacao HTML com destaque do snippet 
     """ 
     lexer = get_lexer_by_name(self.language) 
     linenos = self.linenos and 'table' or False 
     options = self.title and {'title': self.title} or {} 
     formatter = HtmlFormatter(style=self.style, linenos=linenos, full=True, **options) 
     self.highlighted = highlight(self.code, lexer, formatter) 
     super(Snippet, self).save(*args, **kwargs) 
+1

用戶模型默認情況下是否有「snippets」字段? – dursk 2015-03-02 20:01:59

+0

不,但由於Foreignkey @mattm存在snippet_set。 – 2015-03-02 20:07:08

+0

@Bakuriu,我正在學習教程,好嗎?我在我的UserSerializer類中添加了一個snippets字段,這就是我正在使用的。我使用generics.ListAPIView來製作視圖,所以它應該可以工作。 – 2015-03-02 20:17:54

回答

8

在你的片段模式,你需要一個相關的名字添加到您的所有者字段。

owner = models.ForeignKey('auth.User', related_name='snippets')