我是django rest框架的新手
我对如何使用ManyToManyField获取关系值有疑问。
这是我的代码:
models.py
class Movie(models.Model):
link = models.URLField()
title = models.CharField(max_length=255, null=True)
class MovieTheater(models.Model):
movietheater = models.ManyToManyField(Movie,null=True,blank=True,through="MovieShowtime")
movie_theater = models.CharField(max_length=255, null=True)
tel = models.CharField(max_length=255, null=True)
class MovieShowtime(models.Model):
theater = models.ForeignKey( MovieTheater, null=True,blank=True,related_name = 'theater' )
movie = models.ForeignKey( Movie, null=True,blank=True,related_name = 'movie' )
time = models.TextField(null=True,blank=True) serialize.py
class MovieSerializer(serializers.ModelSerializer):
class Meta:
model = Movie
fields = ('link', 'title')
class MovieShowtimeSerializer(serializers.ModelSerializer):
movieid = serializers.CharField(source='movie_id')
theaterid = serializers.CharField(source='theater_id')
class Meta:
model = MovieShowtime
fields = ('movieid', 'theaterid','time' )
class TheaterSerializer(serializers.ModelSerializer):
movieintheater = serializers.HyperlinkedRelatedField(many=True,source='movietheater', view_name='movie_detail')
time = MovieShowtimeSerializer(many=True, read_only=True, source='theater')
class Meta:
model = MovieTheater
fields = ('movieintheater','time','tel' )views.py
class TheaterList(object):
queryset = MovieTheater.objects.all()
serializer_class = TheaterSerializer当我去url(r'^theaters/$', TheaterList.as_view())的时候
结果如下:
{
"movieintheater": [
"http://127.0.0.1:8000/movies/159",
"http://127.0.0.1:8000/movies/160",
],
"time": [
{
"movieid": 159,
"theaterid": 3,
"time": "12 : 50 PM | 06 : 20 PM"
},
{
"movieid": 160,
"theaterid": 3,
"time": "12 : 40 PM | 04 : 50 PM | 09 : 00 PM"
},
],
"tel": "1234567890"
}, 我想知道如何像这样展示价值:
直接替换模型信息中的数字(movieid,theaterid)
请教我。谢谢
{
"movieintheater": [
"http://127.0.0.1:8000/movies/159",
"http://127.0.0.1:8000/movies/160",
],
"time": [
{
"movieid.title": 'movie1',
"theaterid": 3,
"time": "12 : 50 PM | 06 : 20 PM"
},
{
"movieid.title": 'movie2',
"theaterid": 3,
"time": "12 : 40 PM | 04 : 50 PM | 09 : 00 PM"
},
],
"tel": "1234567890"
}, 发布于 2014-11-12 03:17:12
Django REST框架中字段的source可以跨越关系,因此您可以获取相关对象的属性并将其用于字段。
class MovieShowtimeSerializer(serializers.ModelSerializer):
title = serializers.CharField(source='movie.title')
theaterid = serializers.CharField(source='theater_id')
class Meta:
model = MovieShowtime
fields = ('movieid', 'theaterid','time', ) 您必须使用虚线路径作为source,因此movie.title将为您获取相关movie的title。不过,您可能对更多的领域感兴趣,在这种情况下,您可能会更好地使用nesting another serializer,就像您已经为节目时间所做的那样。
https://stackoverflow.com/questions/26877921
复制相似问题