python - Django Rest 框架 - 通用 View

标签 python django rest

我正在学习 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 请求来创建单词记录时,您将发送单词的用户属性的列表(并且是一个空列表),其中框架正在等待用户。

我从您发布的代码中看到了一些内容:

  1. 根据您设置模型的方式,一个 Word 可以有一个用户,但一个用户可以有多个 Word。这是你的意图吗?如果是,那么我认为您不应该在 Word 序列化程序中指定 Many=True。
  2. 是否可以在没有用户的情况下拥有一个单词?在这种情况下,您可能希望用户字段允许“无”。
  3. 您发布的 JSON 是什么样的?要创建一个单词(根据我所看到的,这是我从头到尾想到的),您应该发送如下内容:

    { '值': '测试词' “用户”:1 }

其中 user 的值是您要与该单词关联的用户的主键。

关于python - Django Rest 框架 - 通用 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22635598/

相关文章:

python - 创建或编辑模型实例时 Django admin 404 错误

javascript - 来自 Web 服务的 JSON 响应 - 最佳实践问题

python - tkinter PhotoImage 不存在?

python - 使用 boto,在 s3 上已经存在的文件上设置 content_type

django - AppEngine 上的自定义 django 模板标签问题

python - Django 上传不在 MEDIA_ROOT 路径中的文件给我 SuspiciousOperation 错误

python - 使用 Flask 保护静态文件

python代码简化及解释

java - Spring MVC 不兼容 Jax RS : is it risky?

javascript - 如何使用 AngularJS 在来自 REST 的 JSON 响应中创建可点击的 URL?