python - Django rest 框架 - 序列化程序无效
问题描述
再会。我正在尝试通过 POST 方法创建一个实体。我有 Serializer 和一些 javascript 代码 - 它向我发送 FormData ,我正在尝试对其进行序列化。这是我的看法:
@api_view(['POST'])
@parser_classes([MultiPartParser, FormParser])
def cocktail_create(request):
"""Создание коктейля"""
pprint(request.data)
serializer = CocktailCreateSerializer(data=request.data)
pprint(serializer.fields)
if serializer.is_valid():
serializer.create(serializer.validated_data)
else:
pprint(serializer.errors)
请求数据:
{'author': '4',
'cocktail_tool': '[{"tool":"1","amount":"1"}, {"tool":"2","amount":"1"}]',
'csrfmiddlewaretoken': 'KFb9ZEBwWViF4Sm9pQxZn5KcfXpfu7t6OigeqsXZri9hoQQ1RPuS1lQDF3NJ3Aq5',
'description': 'asdasd',
'img': <InMemoryUploadedFile: pp,504x498-pad,600x600,f8f8f8.jpg (image/jpeg)>,
'name': 'Danya',
'recipe': '[{"ingredient":"1","amount":"1"},{"ingredient":"2","amount":"1"}]',
'recipe_text': '{"1":"asdasd","2":"asdasd"}',
'small_img': <InMemoryUploadedFile: pp,504x498-pad,600x600,f8f8f8.jpg (image/jpeg)>}
序列化器.字段:
{'img': ImageField(allow_null=True, max_length=100, required=False),
'small_img': ImageField(allow_null=True, max_length=100, required=False),
'cocktail_tool':
CocktailToolsForCocktailCreateSerializer(many=True):
amount = IntegerField(max_value=2147483647, min_value=-2147483648)
tool = PrimaryKeyRelatedField(queryset=BarTool.objects.all()),
'description': CharField(style={'base_template': 'textarea.html'}), 'name': CharField(max_length=255,
validators=[<UniqueValidator(queryset=Cocktail.objects.all())>]), 'recipe':
RecipeForCocktailCreateSerializer(many=True):
amount = IntegerField(max_value=2147483647, min_value=-2147483648)
ingredient = PrimaryKeyRelatedField(queryset=Ingredient.objects.all()),
'recipe_text': JSONField(decoder=None, encoder=None, style={'base_template': 'textarea.html'}),
'author': PrimaryKeyRelatedField(allow_null=True, queryset=BarbookUser.objects.all(),
required=False)}
序列化程序错误:
{'cocktail_tool': [ErrorDetail(string='This field is required.', code='required')],
'recipe': [ErrorDetail(string='This field is required.', code='required')]}
我的序列化器:
class CocktailToolsForCocktailCreateSerializer(serializers.ModelSerializer):
class Meta:
model = CocktailTool
fields = ("amount", "tool")
class RecipeForCocktailCreateSerializer(serializers.ModelSerializer):
class Meta:
model = CocktailRecipe
fields = ("amount", "ingredient")
class CocktailCreateSerializer(serializers.ModelSerializer):
cocktail_tool = CocktailToolsForCocktailCreateSerializer(many=True)
recipe = RecipeForCocktailCreateSerializer(many=True)
class Meta:
model = Cocktail
fields = ("img", "small_img", "cocktail_tool", "description",
"name", "recipe", "recipe_text", "author")
我的模型:我有一个鸡尾酒模型、成分模型和 bartool 模型,以及多对多的表格,例如:
class CocktailRecipe(models.Model):
cocktail = models.ForeignKey(Cocktail, on_delete=models.CASCADE, related_name="recipe")
ingredient = models.ForeignKey(Ingredient, on_delete=models.CASCADE, related_name="ingredient")
amount = models.IntegerField()
class CocktailTool(models.Model):
cocktail = models.ForeignKey(Cocktail, on_delete=models.CASCADE, related_name="cocktail_tool")
tool = models.ForeignKey("BarTool", on_delete=models.CASCADE)
amount = models.IntegerField()
所以问题,正如你所看到的,序列化程序看到了这个字段,我没有问他。感谢您的帮助。
解决方案
推荐阅读
- javascript - 查找下一个最大回文数的 Javascript 函数
- r - RStudio 中 Markdown 文档顶部的内联预览覆盖
- linux - 如何在另一个文本文件上使用 afk 脚本运行文件
- python - Selenium 登录过程自动化到 Grofers - Python
- nginx - 如何使用 nginx 重定向但保留旧网址
- outlook - Outlook 日历 Web 加载项
- macos - 将 go 应用程序捆绑为 Mac 应用程序并拦截图标单击
- r - 如何根据缺失值在 R 中创建新列
- javascript - Javascript - 无法理解这行代码
- python - Crawling 'UserWarning' What should I do?