为 manytomany 字段检索 api
making a retrieve api for a manytomany field
我正在用 django rest 框架制作一个 API 它应该做的是,它必须 return 某个名人表演或导演的电影。
而且我不知道该怎么做。因为电影模型有很多字段,称为 filmActor 和 filmDirector,我想最好通过扩展 ModelSerializer class.
来实现 api
# Models.py
class Celebrity(models.Model):
celebID = models.AutoField(primary_key=True)
nameOf = models.CharField(max_length=100, unique=True)
details = models.TextField(null=True)
class Film(models.Model):
filmID = models.AutoField(primary_key=True)
title = models.CharField(max_length=150)
filmActor = models.ManyToManyField(Celebrity, related_name='actor')
filmDirector = models.ManyToManyField(Celebrity, related_name='director')
# Serializers.py
class CelebrityRetrieveSerializer(serializers.ModelSerializer):
# TO BE DONE
感谢“_set”,您可以访问 many-to-many 相关对象。
这样的事情应该有效:
class FilmSerializer(serializers.ModelSerializer):
class Meta:
model = Film
fields = ('filmID', 'title')
class GenreRetrieveSerializer(serializers.ModelSerializer):
film_set = FilmSerializer(many=True)
class Meta:
model = Genre
fields = '__all__'
@ThomasGth 给出的答案只有在您有 1 个 foreign-key 或 many-to-many 字段时才有效。
要使用两个外键执行此操作,您必须在 serializers.py 中命名该字段,即为 models.py 中的 related_name 字段指定的名称。所以代码应该是这样的:
class CelebrityRetrieveSerializer(serializers.ModelSerializer):
class FilmSerializer(serializers.ModelSerializer):
class Meta:
model = Film
fields = ('title',)
actor = FilmSerializer(read_only=True, many=True,)
director = FilmSerializer(read_only=True, many=True,)
class Meta:
model = Celebrity
fields = '__all__'
您还必须确保为 related_name 提供的值不与您在代码中使用的其他名称冲突。例如,如果您将它设置为 related_name = Film
,它可能会导致问题。
我正在用 django rest 框架制作一个 API 它应该做的是,它必须 return 某个名人表演或导演的电影。
而且我不知道该怎么做。因为电影模型有很多字段,称为 filmActor 和 filmDirector,我想最好通过扩展 ModelSerializer class.
来实现 api# Models.py
class Celebrity(models.Model):
celebID = models.AutoField(primary_key=True)
nameOf = models.CharField(max_length=100, unique=True)
details = models.TextField(null=True)
class Film(models.Model):
filmID = models.AutoField(primary_key=True)
title = models.CharField(max_length=150)
filmActor = models.ManyToManyField(Celebrity, related_name='actor')
filmDirector = models.ManyToManyField(Celebrity, related_name='director')
# Serializers.py
class CelebrityRetrieveSerializer(serializers.ModelSerializer):
# TO BE DONE
感谢“_set”,您可以访问 many-to-many 相关对象。 这样的事情应该有效:
class FilmSerializer(serializers.ModelSerializer):
class Meta:
model = Film
fields = ('filmID', 'title')
class GenreRetrieveSerializer(serializers.ModelSerializer):
film_set = FilmSerializer(many=True)
class Meta:
model = Genre
fields = '__all__'
@ThomasGth 给出的答案只有在您有 1 个 foreign-key 或 many-to-many 字段时才有效。
要使用两个外键执行此操作,您必须在 serializers.py 中命名该字段,即为 models.py 中的 related_name 字段指定的名称。所以代码应该是这样的:
class CelebrityRetrieveSerializer(serializers.ModelSerializer):
class FilmSerializer(serializers.ModelSerializer):
class Meta:
model = Film
fields = ('title',)
actor = FilmSerializer(read_only=True, many=True,)
director = FilmSerializer(read_only=True, many=True,)
class Meta:
model = Celebrity
fields = '__all__'
您还必须确保为 related_name 提供的值不与您在代码中使用的其他名称冲突。例如,如果您将它设置为 related_name = Film
,它可能会导致问题。