[英]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] 之類的類別,但是,在成功發布類別列表后為空。
如何解決?
請看一下
您可以通過將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.