我有以下模型结构:
class Project(models.Model):
author = models.ManyToManyField(Account)
name = models.CharField(max_length=40, default='NewBook')
class Account(AbstractBaseUser):
email = models.EmailField(unique=True)
username = models.CharField(max_length=40, unique=True)
first_name = models.CharField(max_length=40, blank=True)
last_name = models.CharField(max_length=40, blank=True)
tagline = models.CharField(max_length=140, blank=True)
is_admin = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
objects = AccountManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
我的观点是这样的:
class ProjectViewSet(viewsets.ModelViewSet):
queryset = Project.objects.order_by('-name')
serializer_class = ProjectSerializer
def perform_create(self, serializer):
instance = serializer.save(author=self.request.user)
return super(ProjectViewSet, self).perform_create(serializer)
调用视图函数后,会在数据库中创建一个分类器。但之后,我收到以下错误:
类型错误:“帐户”对象不可迭代
错误在这一行中抛出:
instance = serializer.save(author=self.request.user)
任何人都可以帮我解决这个问题吗?
这里有两个问题:
- Showing 嵌套关系 http://www.django-rest-framework.org/api-guide/relations/#nested-relationships对于M2M领域:
如果该字段用于表示一对多关系,则应添加many=True
标记到序列化器字段。
所以你需要添加many=True
to AccountSerializer
:
author = AccountSerializer(read_only=True, required=False, many=True)
- A 可写嵌套序列化器 http://www.django-rest-framework.org/api-guide/relations/#writable-nested-serializers:
默认情况下,嵌套序列化器是read-only
。如果您想支持对嵌套序列化器字段的写入操作,您需要创建create()
and/or update()
方法以明确指定如何保存子关系。
因此,如果您查看示例和文档,似乎您需要实现create
or update
method.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)