django - 我想将 JSON 值列表发布到 Django 中的模型字段
问题描述
我想将电影发布到集合的电影字段(电影列表)中。我将模型定义为
class Movie(models.Model):
# collection = models.ForeignKey(Collection, on_delete = models.CASCADE) #, related_name='reviews'
title = models.CharField(max_length=200)
description = models.CharField(max_length=200)
genres = models.CharField(max_length=200)
uuid = models.CharField(max_length=200)
def __str__(self):
return self.title
class Collection(models.Model):
title = models.CharField(max_length=200)
uuid = models.CharField(max_length=200, primary_key = True)
description = models.CharField(max_length=200)
movie = models.ForeignKey(Movie, on_delete = models.CASCADE)
def __str__(self):
return self.title
这就是我使用视图集的方式
class CollectionViewSet(viewsets.ModelViewSet):
queryset = models.Collection.objects.all()
serializer_class = serializers.CollectionSerializer
但我无法为电影字段输入值 在 此处输入图像描述
也是我的序列化器
class CollectionSerializer(serializers.ModelSerializer):
class Meta:
model = Collection
fields = '__all__'
解决方案
默认情况下,DRF 将表示与 a 的关系PrimaryKeyRelatedField
,因此需要一个电影 ID。
为了实现你想要的(创建一个带有集合的电影实例),你需要用你自己的电影序列化器覆盖序列化器中的外键字段。
class MovieSerializer(serializers.ModelSerializer):
class Meta:
model = Movie
fields = '__all__'
class CollectionSerializer(serializers.ModelSerializer):
movie = MovieSerializer()
class Meta:
model = Collection
fields = '__all__'
def create(self, validated_data):
movie = validated_data.pop('movie')
movie = Movie .objects.create(**movie )
collection = Collection.objects.create(movie=movie, **validated_data)
return collection
您需要覆盖 create 方法,以便在创建 Collection 时还创建电影。
但是,我不确定在您的模型中是否在正确的模型中设置了外键。(一部电影属于许多集合,但不是相反?)如果这不是你想要的,只需反转序列化程序的逻辑。
编辑:
发送以下内容应该可以正常工作:
{ "uuid": "1001",
"title": "Action",
"description": "Action Movies",
"movie": { "title": "The Burkittsville 7",
"description": "The story of Rustin Parr.",
"genres": "Horror",
"uuid": "5e904"
}
}
正如我之前提到的,唯一的问题是在您的模型中,您在集合中定义了外键字段。所以它需要一个电影实例而不是一个列表,因此我去掉了你放在电影周围的括号。也许您应该考虑在 Movie 模型中设置外键,或者使用多对多关系。
推荐阅读
- ckeditor - 如何在特定ckeditor的光标位置插入文本?
- java - Firebase dataSnapshot.getValue(Subclass.class) 函数永远不会返回
- c# - 无法理解 async 的行为,在 c# 中等待
- css - 如何修复中心的引导导航切换按钮
- python - numpy中的3-D numpy矩阵乘法得到一维数组
- html - 无法显示 codepen 图标
- java - Spring-data-elasticsearch“嵌套查询抛出[嵌套]未能在路径下找到嵌套对象”异常
- docker - logstash 输入文件配置——从不同的 docker 获取输入文件
- python - 在python中用数字修改列表
- oracle - 并排放置两个区域