Django REST框架:AttributeError:'User'对象没有属性'books'

wgf*_*242 4 django django-rest-framework

http://127.0.0.1:8000/app_restFramework/users/,返回文字

/ app_restFramework/users /'User'对象的AttributeError没有属性'books'

models.py

class User(models.Model):
    username = models.CharField(max_length=100)

class Book(models.Model):
    name = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    publisher = models.CharField(max_length=100)
    time = models.CharField(max_length=100)
    owner = models.ManyToManyField(User)
Run Code Online (Sandbox Code Playgroud)

serializers.py

from app_restFramework.models import Book,User
class UserSerializer(serializers.ModelSerializer):
    books = serializers.PrimaryKeyRelatedField(many = True, read_only = True)

    class Meta:
        model = User
        fields = ('id', 'username', 'books')
Run Code Online (Sandbox Code Playgroud)

views.py

class UserList(generics.ListCreateAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
Run Code Online (Sandbox Code Playgroud)

urls.py

url(r'^app_restFramework/users/$', app_restFramework.views.UserList.as_view() ), 
Run Code Online (Sandbox Code Playgroud)

Eva*_*thi 7

你还没有在related_name中指定ManyToManyField.默认情况下会是book_set.因此你可以这样做:

book_set = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
Run Code Online (Sandbox Code Playgroud)

如果要books在序列化程序中使用,可以在Book模型中执行此操作:

owner = models.ManyToManyField(User, related_name="books")
Run Code Online (Sandbox Code Playgroud)