我正在学习 Django 和 Django REST 框架。 我正在尝试做API并添加查看权限。
从 django.db 导入模型 从 django.contrib.auth.models 导入用户
我的模型:
class Profile(models.Model):
nickname = models.CharField(max_length=100)
# Relations
user = models.OneToOneField(User)
class Word(models.Model):
value = models.CharField(max_length=100)
user = models.ForeignKey(User, related_name='word')
我的序列化器:
from rest_framework import serializers
from myapp.models import Profile, Word
from django.contrib.auth.models import User
class ProfileSerializer(serializers.ModelSerializer):
user = serializers.PrimaryKeyRelatedField()
class Meta:
model = Profile
fields = ('id', 'nickname', 'user')
class UserSerializer(serializers.ModelSerializer):
profile = serializers.PrimaryKeyRelatedField()
class Meta:
model = User
fields = ('id', 'username', 'profile')
class WordSerializer(serializers.ModelSerializer):
user = serializers.PrimaryKeyRelatedField(many=True)
class Meta:
model = Word
fields = ('id', 'value', 'user')
我的观点:
class WordList(generics.ListCreateAPIView):
queryset = Word.objects.all()
serializer_class = WordSerializer
class WordDetail(generics.RetrieveUpdateAPIView):
queryset = Word.objects.all()
serializer_class = WordSerializer
当我尝试添加新的“单词”时 - 显示错误:
Cannot assign "[]": "Word.user" must be a "User" instance.
Request Method: POST
Request URL: http://127.0.0.1:8080/api/words/
Django Version: 1.6.2
Exception Type: ValueError
Exception Value:
Cannot assign "[]": "Word.user" must be a "User" instance.
Exception Location: /home/mikhail/virtualenv/test/lib/python3.3/site-packages/django/db/models/fields/related.py in __set__, line 337
Python Executable: /home/mikhail/virtualenv/test/bin/python3.3
Python Version: 3.3.5
Python Path:
['/home/mikhail/virtualenv/test/bin/mysite',
'/home/mikhail/virtualenv/test/lib/python3.3/site-packages/MySQL_python-1.2.3-py3.3-linux-x86_64.egg',
'/home/mikhail/virtualenv/test/lib/python3.3',
'/home/mikhail/virtualenv/test/lib/python3.3/plat-linux',
'/home/mikhail/virtualenv/test/lib/python3.3/lib-dynload',
'/usr/lib/python3.3',
'/usr/lib/python3.3/plat-linux',
'/home/mikhail/virtualenv/test/lib/python3.3/site-p
序列化器或 View 中出现问题? 如何解决?
最佳答案
当您发送 POST 请求来创建单词记录时,您将发送单词的用户属性的列表(并且是一个空列表),其中框架正在等待用户。
我从您发布的代码中看到了一些内容:
- 根据您设置模型的方式,一个 Word 可以有一个用户,但一个用户可以有多个 Word。这是你的意图吗?如果是,那么我认为您不应该在 Word 序列化程序中指定 Many=True。
- 是否可以在没有用户的情况下拥有一个单词?在这种情况下,您可能希望用户字段允许“无”。
您发布的 JSON 是什么样的?要创建一个单词(根据我所看到的,这是我从头到尾想到的),您应该发送如下内容:
{ '值': '测试词' “用户”:1 }
其中 user 的值是您要与该单词关联的用户的主键。
关于python - Django Rest 框架 - 通用 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22635598/