Python 带FK的DRF POST对象

Python 带FK的DRF POST对象,python,json,django,django-rest-framework,Python,Json,Django,Django Rest Framework,首先,我的型号: 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.Fore

首先,我的型号

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")
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
我想发布json文件来创建导演、带电影的导演(一次)或电影

下面是我的序列化程序

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")
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:

导演id=1=>C.诺兰;-)

我想我错过了一些东西,所以如果有人能帮助我,给我建议,或者其他什么

谢谢,问候

问题是:
我必须发布什么JSON文件才能将“星际”电影添加到诺兰的电影中(id_director=1)?

您无法在此处添加新电影,因为您已排除了MovieSerializer中的
director
字段。但是导演字段是电影模型所必需的。删除排除应该有效

您使用的是什么类型的请求和哪个端点?您是否使用了Django的批量创建,如果没有,请查看此链接:@zymud请求类型??:json数据通过http使用POST-verb(这就是您想知道的:/?)。终点??在数据库中创建新电影。我不确定你的问题。。。抱歉。@ChitrankDixit:我看了querysets/bulk\u创建文档。但我不知道它能帮我什么忙?…该死!我这样做是为了很好地代表其余的董事名单。也许你知道怎么做,我的意思是,不要重复导演列表中的导演id:
[{“id”:1,“name”:“C.Nolan”,“movies”:[{“title”:“Interstellar”,“director”:1}]}]
?非常感谢。是否将director字段设置为只写?但是如果您有一个/movies/endpoint,那么那里就不会有director数据。否则,您可以覆盖MovieSerializer的to_表示,以从电影数据中删除导演详细信息事实上,我想我需要电影对象的两种不同表示。所以2个序列化程序。。。