首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >djangorestframework:使用manytomanyfield获取值

djangorestframework:使用manytomanyfield获取值
EN

Stack Overflow用户
提问于 2014-11-12 01:51:54
回答 1查看 90关注 0票数 0

我是django rest框架的新手

我对如何使用ManyToManyField获取关系值有疑问。

这是我的代码:

models.py

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
class TheaterList(object):
    queryset = MovieTheater.objects.all()
    serializer_class = TheaterSerializer

当我去url(r'^theaters/$', TheaterList.as_view())的时候

结果如下:

代码语言:javascript
复制
{
    "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)

请教我。谢谢

代码语言:javascript
复制
    {
    "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"
}, 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-12 03:17:12

Django REST框架中字段的source可以跨越关系,因此您可以获取相关对象的属性并将其用于字段。

代码语言:javascript
复制
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将为您获取相关movietitle。不过,您可能对更多的领域感兴趣,在这种情况下,您可能会更好地使用nesting another serializer,就像您已经为节目时间所做的那样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26877921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档