[英]adding a foreignkey set to serializer in django rest framework
我正在制作一個與電影相關的網站,而且,每部電影或電視節目都有一些預告片。 我有兩個模型,看起來像下面提供的代碼。 我需要制作一個 API 來檢索包含所有詳細信息的電影實例。 我已經完成了所需的一切,剩下的唯一一件事就是返回預告片視頻的詳細信息。
預告片 model 有一個外鍵字段指向與其相關的電影。 但我不知道如何將每部電影的視頻詳細信息添加到檢索實例 api。
知道我該怎么做嗎?
模型.py
class Film(models.Model):
filmID = models.AutoField(primary_key=True)
title = models.CharField(max_length=150)
price = models.PositiveIntegerField()
seasons = models.IntegerField(default=1)
duration = models.PositiveIntegerField()
statusOf = models.IntegerField(default=1, validators=[MaxValueValidator(4), MinValueValidator(1),])
typeOf = models.IntegerField(validators=[MaxValueValidator(4), MinValueValidator(1),])
numberOfFilminoRatings = models.PositiveIntegerField(default=0)
filminoRating = models.IntegerField(default=0, validators=[MaxValueValidator(10), MinValueValidator(0),])
rating = models.IntegerField(default=0, validators=[MaxValueValidator(10), MinValueValidator(0),])
releaseDate = models.DateTimeField(null=True)
details = models.TextField()
salePercentage = models.PositiveIntegerField(default=0)
saleExpiration = models.DateTimeField(auto_now_add=True)
filmGenre = models.ManyToManyField(Genre)
filmActor = models.ManyToManyField(Celebrity, related_name='actor')
filmDirector = models.ManyToManyField(Celebrity, related_name='director')
filmProducer = models.ManyToManyField(Celebrity, related_name='producer')
def __str__(self):
return f"{self.title} {self.releaseDate.strftime('%Y')}"
class Video(models.Model):
videoID = models.AutoField(primary_key=True)
duration = models.PositiveIntegerField()
qualityHeight = models.PositiveIntegerField()
qualityWidth = models.PositiveIntegerField()
sizeOf = models.PositiveIntegerField()
directoryLocation = models.TextField()
film = models.ForeignKey(Film, null=True, on_delete=models.SET_NULL)
序列化程序.py
class FilmRetrieveSerializer(serializers.ModelSerializer):
class Meta:
model = Film
fields = ('filmID', 'title', 'price', 'seasons', 'duration',
'statusOf', 'typeOf', 'numberOfFilminoRatings', 'filminoRating',
'rating', 'releaseDate', 'details', 'salePercentage', 'saleExpiration',
'filmGenre', 'filmActor', 'filmDirector', 'filmProducer')
read_only_fields = ('filmID',)
視圖.py
class FilmRetrieveViewSet(RetrieveUpdateDestroyAPIView):
serializer_class = serializers.FilmRetrieveSerializer
queryset = Film.objects.all()
lookup_field = 'filmID'
def get_queryset(self):
return self.queryset
您需要創建視頻序列化程序並將其添加到filmretrieveserializer 中的字段。
class VideoSerializer(serializer.ModelSerializer):
class Mete:
model = Video
fields = ()
class FilmRetrieveSerializer(serializers.ModelSerializer):
videos = VideoSerilazer(many=true, read_only=true)
class Meta:
model = Film
fields = ('filmID', 'title', 'price', 'seasons', 'duration',
'statusOf', 'typeOf', 'numberOfFilminoRatings', 'filminoRating',
'rating', 'releaseDate', 'details', 'salePercentage', 'saleExpiration',
'filmGenre', 'filmActor', 'filmDirector', 'filmProducer', videos)
read_only_fields = ('filmID',)
我必須為視頻添加一個序列化程序,並將其源設置為 video_set 查詢集!
class VideoSerializer(serializer.ModelSerializer):
class Mete:
model = Video
fields = ()
class FilmRetrieveSerializer(serializers.ModelSerializer):
videos = VideoSerilazer(many=true, read_only=true, source='video_set') #SOURCE ADDED
class Meta:
model = Film
fields = ('filmID', 'title', 'price', 'seasons', 'duration',
'statusOf', 'typeOf', 'numberOfFilminoRatings', 'filminoRating',
'rating', 'releaseDate', 'details', 'salePercentage', 'saleExpiration',
'filmGenre', 'filmActor', 'filmDirector', 'filmProducer', 'videos')
read_only_fields = ('filmID',)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.