我正在通過一本介紹Django和django rest框架的書。本教程創建一個包含遊戲,類別,玩家和分數的休息API,並在它們之間建立適當的關係模型。 插入類遊戲,我得到以下錯誤,當我在一個偶然的問題:django rest框架屬性錯誤
AttributeError at /game-categories/
'GameCategory' object has no attribute 'games'
Request Method: POST
Request URL: http://127.0.0.1:8000/game-categories/
Django Version: 1.10.5
Exception Type: AttributeError
Exception Value:
'GameCategory' object has no attribute 'games'
Exception Location: C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-packages\rest_framework\fields.py in get_attribute, line 103
Python Executable: C:\Users\user\AppData\Local\Programs\Python\Python36-32\python.exe
Python Version: 3.6.0
Python Path:
['C:\\Python\\Django01\\gamesapi',
'C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python36-32\\python36.zip',
'C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python36-32\\DLLs',
'C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python36-32\\lib',
'C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python36-32',
'C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\site-packages']
Server time: Wed, 8 Mar 2017 09:40:42 +0000
我的比賽,GameCategory型號如下:
class GameCategory(models.Model):
name = models.CharField(max_length=200)
class Meta:
ordering = ('name',)
def __str__(self):
return self.name
class Game(models.Model):
created = models.DateTimeField(auto_now_add=True)
name = models.CharField(max_length=200, blank=True, default='')
game_category = models.ForeignKey(GameCategory, related_name='games', on_delete=models.CASCADE)
release_date = models.DateTimeField()
game_category = models.CharField(max_length=200, blank=True, default='')
played = models.BooleanField(default=False)
class Meta:
ordering = ('name',)
def __str__(self):
return self.name
和我的urls.py的片段:
urlpatterns = [
url(r'^game-categories/$', views.GameCategoryList.as_view(),name=views.GameCategoryList.name),
url(r'^game-categories/(?P<pk>[0-9]+)$', views.GameCategoryDetail.as_view(), name=views.GameCategoryDetail.name),
views.py:
from games.models import GameCategory
from games.models import Game
from games.models import Player
from games.models import PlayerScore
from games.serializers import GameCategorySerializer
from games.serializers import GameSerializer
from games.serializers import PlayerSerializer
from games.serializers import PlayerScoreSerializer
from rest_framework import generics
from rest_framework.response import Response
from rest_framework.reverse import reverse
class GameCategoryList(generics.ListCreateAPIView):
queryset=GameCategory.objects.all()
serializer_class=GameCategorySerializer
name='gamecategory-list'
class GameCategoryDetail(generics.RetrieveUpdateDestroyAPIView):
queryset=GameCategory.objects.all()
serializer_class = GameCategorySerializer
name = 'gamecategory-detail'
class GameList(generics.ListCreateAPIView):
queryset=Game.objects.all()
serializer_class = GameSerializer
name = 'game-detail'
class GameDetail(generics.RetrieveUpdateDestroyAPIView):
queryset=Game.objects.all()
serializer_class=GameSerializer
name='game-detail'
serializers.py
from rest_framework import serializers
from games.models import GameCategory
from games.models import Game
from games.models import Player
from games.models import PlayerScore
import games.views
class GameCategorySerializer(serializers.HyperlinkedModelSerializer):
games = serializers.HyperlinkedRelatedField(
many=True,
read_only=True,
view_name='game-detail'
)
class Meta:
model = GameCategory
fields = ('url','pk','name','games')
class GameSerializer(serializers.HyperlinkedModelSerializer):
#We want to display the game categorys name instead of the id
game_category = serializers.SlugRelatedField(queryset=GameCategory.objects.all(), slug_field='name')
class Meta:
model = Game
fields = (
'url',
'game_category',
'name',
'release_date',
'played'
)
我還是很新的Python的,更何況是這樣的Django掙扎着從給出的調試信息源在這裏的錯誤。
任何人都可以幫助我理解問題出在哪裏,爲什麼?
感謝
謝謝,但不幸的是沒有任何區別。完全相同的錯誤。 – LDJ
我想我找到了它......更新了我的答案! –
你說得對。這確實是重複的。你是如何從錯誤中推斷出來的?我現在有另一個錯誤(沒有這樣的列:games_game.game_category_id),但寧願知道如何自己調試這些。有任何想法嗎?謝謝 – LDJ