【问题标题】:drf create manytomany fieldsdrf 创建多对多字段
【发布时间】:2021-10-16 04:42:34
【问题描述】:

型号

class CreatorRawArtwork(models.Model):
    id         = models.AutoField(primary_key=True)
    title      = models.CharField(max_length=500)
    descripton = models.TextField()
    editions   = models.IntegerField(null=True, blank=True)
    price      = models.CharField(max_length=500)
    created_at = models.DateTimeField(auto_now_add=True, null=True, blank=True)
    medias     = models.FileField(null=True, blank=True, upload_to="raw-medias")
    user       = models.ForeignKey(to=Login, on_delete=models.CASCADE, related_name="creatorrawartwork", null=True, blank=True
    )
    collection = models.ForeignKey(
    to=DesignerCollection, on_delete=models.CASCADE, related_name="creatorrawartwork", null=True, blank=True)
    categories = models.ManyToManyField(DesignerCategories, related_name='creatorrawartwork')

    def __str__(self):
        return self.title

序列化器

class CreatorRawArtworkSerializer(serializers.ModelSerializer):
    categories = serializers.PrimaryKeyRelatedField(queryset=DesignerCategories.objects.all(), many=True)

    class Meta:
        model = CreatorRawArtwork
        fields = "__all__"
        depth=1

观看次数

class CreatorRawArtworkView(viewsets.ModelViewSet):
    queryset = CreatorRawArtwork.objects.all()
    serializer_class = CreatorRawArtworkSerializer

在这里我正在尝试使用 drf serialier 创建 manytomany 字段,但它显示了一些错误 请检查屏幕截图中的参数和响应

请问是什么问题

【问题讨论】:

  • by create manytomany fields,您的意思是要创建DesignerCategories 对象,其值为1 和2...??或者只是想将它附加在CreatorRawArtwork 对象中...??
  • [1,2] 我会发送这样的类别。因为已经创建了类别
  • 您可能会以字符串的形式获取它。通过执行 json.loads()... 将其转换为列表

标签: django django-rest-framework


【解决方案1】:
class CreatorRawArtworkSerializer(serializers.ModelSerializer):
        collection = DesignerCollectionSerializer(read_only=True) #assuming you have already defined serializer for *DesignerCollectionSerializer*
        categories = DesignerCategoriesSerializer(many=True)

        class Meta:
            model = CreatorRawArtwork
            fields = "__all__"
            depth=1

【讨论】:

    【解决方案2】:

    我用您的代码进行了测试,您的代码运行良好 只需确保您的请求数据是 json

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 1970-01-01
      • 2020-10-11
      • 1970-01-01
      • 1970-01-01
      • 2018-09-21
      相关资源
      最近更新 更多