【发布时间】:2016-09-29 06:56:18
【问题描述】:
首先,我的模型:
class Director(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
class Movie(models.Model):
title = models.CharField(max_length=150, unique=True)
director = models.ForeignKey(Director, related_name="movies")
我想发布 json 文件来创建一个导演、一个有电影的导演(一次)或一部电影。
所以,这是我的序列化程序:
class MovieSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(read_only=True)
url = HyperlinkedIdentityField(view_name='movie')
class Meta:
model = Movie
exclude = ('director', ) # edit (solution) this line is the problem. It does not only affect the representation... Just remove that and it's OK
class DirectorSerializer(serializers.ModelSerializer):
movies = MovieSerializer(many=True)
class Meta:
model = Director
fields = '__all__'
def create(self, validated_data):
movies = validated_data.pop('movies')
director = self.Meta.model.objects.create(**validated_data)
for movie in movies:
Movie.objects.create(director=director, **movie)
return director
所以,(感谢 httpie),创建一个新的导演:
{
"first_name": "Christopher",
"last_name": "Nolan",
"movies": []
}
工作正常。 用电影创建新导演:
{
"first_name": "Luc",
"last_name": "Besson",
"movies": [
{
"title": "Le Grand Bleu"
}
]
}
也可以。 但我无法添加新电影 即创建新电影。 JSON:
{
"title": "Interstellar",
"director": 1
}
导演 id = 1 => C. Nolan ;-)
我想我错过了一些东西,所以如果有人可以帮助我、给我建议或其他什么?
谢谢,问候
编辑问题是:
我必须 POST 什么 JSON 文件才能将“星际”电影添加到诺兰的电影 (id_director=1)?
【问题讨论】:
-
您使用的是什么类型的请求和哪个端点?
-
你用过Django的批量创建吗,如果没有请看这个链接:docs.djangoproject.com/en/1.9/ref/models/querysets/#bulk-create
-
@zymud 请求类型 ?? : json 数据通过 http 使用 POST 动词(这就是你想知道的:/?)。 Endpoint ?? 在数据库中创建一个新的movie。 我不确定您的问题...抱歉。
-
@ChitrankDixit :我查看了 querysets/bulk_create 文档。但我不知道它对我有什么帮助?...
标签: python json django django-rest-framework