【问题标题】:How can i handle django nested models?我如何处理 django 嵌套模型?
【发布时间】:2020-07-05 13:28:31
【问题描述】:

我在 Django 中有一个用户、帖子和标签模型。标签模型与本主题无关。我可以使用嵌套对象将所有数据发送到前端。另一方面,当我想创建一个新帖子时,我将帖子数据发送到 django,在 django 视图中,我试图更新数据,将登录的用户与“帖子”相关联,但是当我这样做时,它给了我;

  {'owner': {'username': [ErrorDetail(string='A user with that username already exists.', code='unique')]}}

错误。我该如何解决这个错误?

models.py;

class Post(models.Model):
  # Post specs
  title = models.CharField(max_length=100, null=False)
  place = models.CharField(max_length=100, null=False)
  notes = models.CharField(max_length=10000, null=False)
  tags = models.ManyToManyField(Tag)
  start_date = models.DateField(null=True)
  end_date = models.DateField(null=True)
  created_at = models.DateField(auto_now=True)
  owner = models.ForeignKey(User , null = True, on_delete=models.SET_NULL) 

序列化器.py;

class PostSerializer(serializers.ModelSerializer):
  tags = serializers.SlugRelatedField(
        many=True,
        queryset=Tag.objects.all(),
        slug_field='name'
     )
  owner = UserSerializer()
  class Meta:
    model = Post
    fields = ('title','place','notes','start_date','end_date','created_at','id','owner','tags')

顺便说一句,如果我更改 serializer.py 之类的 所有者 = UserSerializer 它只给出主键值。在前端我不能用整数做任何事情,我不想为用户模型进行另一个 api 调用。最后查看post函数;

  def post(self, request, format =None):
    """
    Creates a post
    """
    post = request.data                          ## copy dictionary to a variable
    authenticatedUserDataAsDict =  request.user.__class__.objects.filter(pk=request.user.id).values().first()
    post.update( {'owner': authenticatedUserDataAsDict} )        ## attach authenticated user to post end
    serializer = PostSerializer(data = post)      ## serialize the dict
    if serializer.is_valid():
      serializer.save()                           ## if data valid save it.
      return Response(serializer.data, status = status.HTTP_201_CREATED)
    print("not valid->",serializer.errors)
    return Response(serializer.errors, status = status.HTTP_400_BAD_REQUEST) # if it's not raise http 400

【问题讨论】:

    标签: python django serialization django-rest-framework nested-object


    【解决方案1】:

    已解决

    你好,看起来rest框架不知道我们的请求(创建或获取),因为我们正在处理嵌套的序列化程序。 所以我在 medium 中找到了this 文章,它帮助我解决了我的问题。

    【讨论】:

      猜你喜欢
      • 2011-09-26
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-12
      • 2017-09-05
      相关资源
      最近更新 更多