我是django休息框架的新成员 我有问题如何使用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,movieid)替换为模型的信息
请教我。谢谢
{
"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"
},
答案 0 :(得分:1)
Django REST Framework中的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
会获得相关title
的{{1}}。您可能对更多领域感兴趣,在这种情况下,您可能只是nesting another serializer更好,就像您已经为演出时间做的那样。