簡體   English   中英

Django ManyToManyField 帖子在 drf 中不起作用

[英]Django ManyToManyField post not working in drf

model

class DesignerProduct(models.Model):
    title      = models.CharField(max_length=500, default=None)
    descripton = models.CharField(max_length=500, default=None)
    price      = models.CharField(max_length=500, default=None)
    editions   = models.CharField(max_length=500, default=None)
    verified   = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True, null=True, blank=True)
    user       = models.ForeignKey(
        to=Login, on_delete=models.CASCADE, related_name="designerproduct", null=True, blank=True
    )
    collection = models.ForeignKey(
        to=DesignerCollection, on_delete=models.CASCADE, related_name="designerproduct", null=True, blank=True
    )
    categories = models.ManyToManyField(DesignerCategories, related_name='designerproduct', blank=True)

序列化器

class DesignerProductSeriali
    designerproductmedia = DesignerProductMediaSerializer(many=True, read_only=True)
    user = serializers.PrimaryKeyRelatedField(queryset=Login.objects.all(), many=False)
    collection = serializers.PrimaryKeyRelatedField(queryset=DesignerCollection.objects.all(), many=False)

    user_name = serializers.CharField(source='user.name', read_only=True)
    user_photo = serializers.CharField(source='user.display_photo', read_only=True)
    class Meta:
        model = DesignerProduct
        fields = ('id', "user", "categories", "collection", 'created_at', 'designerproductmedia', 'title', 'descripton', 'price', 'editions', 'verified', 'user_name', 'user_photo')
        depth = 1

上傳后的數據

    {
        "id": 11,
        "user": 9,
        "categories": [],
        "collection": 6,
        "created_at": "2021-06-05T17:03:52.807755Z",
        "designerproductmedia": [
            {
                "file": "designer/products/74647.jpg",
                "id": "38",
                "firework": null
            }
        ],
        "title": "hello there",
        "descripton": "hello there",
        "price": "10",
        "editions": "10",
        "verified": false,
        "user_name": "soubhagya pradhan",
        "user_photo": "profile/52319.jpg"
    }

在這里,我正在完善 django 多對多關系並發送諸如 [1, 2, 3] 之類的類別,但是,在成功發布類別列表后為空。

如何解決?

請看一下

在此處輸入圖像描述 在 drf 中也沒有顯示請檢查此圖像

您可以通過將categories定義為SerializerMethodField來簡單地編寫方法get_categories來獲取與DesignerProduct的每個實例相關的categories

對您的序列化程序進行這些更改 -

class DesignerProductSerializer(serializers.ModelSerializer):

    categories = serializers.SerializerMethodField()
    designerproductmedia = DesignerProductMediaSerializer(many=True, read_only=True)
    user = serializers.PrimaryKeyRelatedField(queryset=Login.objects.all(), many=False)
    collection = serializers.PrimaryKeyRelatedField(queryset=DesignerCollection.objects.all(), many=False)

    user_name = serializers.CharField(source='user.name', read_only=True)
    user_photo = serializers.CharField(source='user.display_photo', read_only=True)
    class Meta:
        model = DesignerProduct
        fields = ('id', "user", "categories", "collection", 'created_at', 'designerproductmedia', 'title', 'descripton', 'price', 'editions', 'verified', 'user_name', 'user_photo')
        depth = 1

    def get_categories(self, obj):
       category_list = []
       category_list.append(category.id) [for category in obj.categories.all()]
       return category_list

為了成功發送POST請求,您必須將categories字段添加到您的序列化程序,如下所示:

categories = serializers.PrimaryKeyRelatedField(
    queryset=DesignerCategories.objects.all(), many=True
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM