Django 多对多模型 DRF

2024-02-06

我有以下模型结构:

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)

任何人都可以帮我解决这个问题吗?


这里有两个问题:

  1. 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)
  1. 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(使用前将#替换为@)

Django 多对多模型 DRF 的相关文章

随机推荐