Python Django REST框架多个序列化程序
我已经搜索了现有的问题/答案、DRF文档,并尝试了多个示例来了解我的研究现状 我遇到的问题是ShowtimeSerializer没有得到填充 我解析了一些API以获得此JSON,其中包含放映时间的电影详细信息:Python Django REST框架多个序列化程序,python,json,django,rest,django-rest-framework,Python,Json,Django,Rest,Django Rest Framework,我已经搜索了现有的问题/答案、DRF文档,并尝试了多个示例来了解我的研究现状 我遇到的问题是ShowtimeSerializer没有得到填充 我解析了一些API以获得此JSON,其中包含放映时间的电影详细信息: {u'poster_path': u'/bEAoNvtqvO0c2lItNkKlKUqhPuw.jpg', u'production_countries': [{u'iso_3166_1': u'US', u'name': u'United States of America'}],
{u'poster_path': u'/bEAoNvtqvO0c2lItNkKlKUqhPuw.jpg', u'production_countries': [{u'iso_3166_1': u'US', u'name': u'United States of America'}], u'revenue': 0, u'overview': u"After moving to a new town, troublemaking teen Jim Stark is supposed to have a clean slate, although being the new kid in town brings its own problems. While searching for some stability, Stark forms a bond with a disturbed classmate, Plato, and falls for local girl Judy. However, Judy is the girlfriend of neighborhood tough, Buzz. When Buzz violently confronts Jim and challenges him to a drag race, the new kid's real troubles begin.", 'youtube': 'Rwh9c_E3dJk', 'is_3d': False, u'video': False, u'id': 221, 'category': u'C', u'genres': [{u'id': 18, u'name': u'Drama'}], u'title': u'Rebel Without a Cause', u'tagline': u'The bad boy from a good family.', u'vote_count': 124, u'homepage': u'', u'belongs_to_collection': None, u'original_language': u'en', u'status': u'Released', u'spoken_languages': [{u'iso_639_1': u'en', u'name': u'English'}], 'tmdb_id': 221, u'imdb_id': u'tt0048545', u'adult': False, u'backdrop_path': u'/aFrfCpEwyyAhIbooDANgWiFzV9R.jpg', u'production_companies': [{u'name': u'Warner Bros.', u'id': 6194}], u'release_date': u'1955-10-27', u'popularity': 0.144839, u'original_title': u'Rebel Without a Cause', u'budget': 1500000, u'vote_average': 7.5, 'showtimes': [[{'showdate': datetime.date(2016, 9, 4)}, {'showtime': '10:00AM'}], [{'showdate': datetime.date(2016, 9, 7)}, {'showtime': '10:00AM'}]], u'runtime': 111}
views.py
序列化程序.py
models.py
请求.数据
包含用户和应用程序信息,作为一个带有ID的数组:
{ "user":[1,2,3], "app":[1,2] }
views.py(或api.py)
序列化程序.py
models.py
最后,我解决了我这边的问题,我能够理解如何相应地更新我的结构。请说明您得到了什么以及您期望得到什么。第二条声明明确指出,放映时间没有增加。我所期望的是,它们将填充Showtime模型所具有的字段;showdate和showtime以及包含在JSON中的showtime。
from rest_framework import serializers
from .models import Film, Showtime
class ShowtimeSerializer(serializers.ModelSerializer):
class Meta:
model = Showtime
class FilmSerializer(serializers.ModelSerializer):
showtimes = ShowtimeSerializer(many=True, read_only=True)
class Meta:
model = Film
from __future__ import unicode_literals
from django.db import models
class Showtime(models.Model):
showdate = models.DateField()
showtime = models.TimeField()
class Film(models.Model):
SERIES = (
('F', 'Featured'),
('L', 'Late Night Series'),
('C', 'Classic Movie Series'),
('K', 'Prytania Kids Series'),
)
imdb_id = models.CharField(max_length=15)
tmdb_id = models.IntegerField()
title = models.CharField(max_length=200)
overview = models.TextField()
release_date = models.DateField()
backdrop_path = models.CharField(max_length=200)
poster_path = models.CharField(max_length=200)
runtime = models.IntegerField()
category = models.CharField(max_length=1, choices=SERIES)
youtube = models.CharField(max_length=20)
is_3d = models.BooleanField(default=False)
tagline = models.CharField(max_length=200)
vote_average = models.DecimalField(max_digits=4, decimal_places=2)
showtimes = models.ManyToManyField(Showtime)
def __str__(self):
return self.title
{ "user":[1,2,3], "app":[1,2] }
class SampleViewSet(APIView):
def post(self, request):
serializer = TeamSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class TeamSerializer(serializers.ModelSerializer):
class Meta:
model = Team
fields = ['user', 'app']
class AppSerializer(serializers.ModelSerializer):
class Meta:
model = App
fields = ['name', 'description']
class App(models.Model):
name = models.CharField(max_length=150, default='')
description = models.TextField(verbose_name='App Description')
def __str__(self):
return f'{self.id} - {self.name}'
class Team(models.Model):
user = models.ManyToManyField(User)
app = models.ManyToManyField(App)
def __str__(self):
return f'Team ID: {self.id}'