django-rest-framework - Django获取模型对象中的objects所对应的JSON数据如何同时获得他们默认生成的id?

查看:249
本文介绍了django-rest-framework - Django获取模型对象中的objects所对应的JSON数据如何同时获得他们默认生成的id?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

我们在写一个前后端分离的Django程序,使用django rest framework,数据库模型中的订单模型的主键是自动生成的id,但是通过post.objects.all()让后端返回的json数据中没有post对象在数据库中对应的id。Ajax通过get相关API返回的json如下图所示:

数据库中的存储如下图所示:

序列化一个订单对象代码如下:

class PostSerializer(serializers.ModelSerializer):

    class Meta:
        model = Post
        fields = ('author', 'title', 'content', 'reward', 'contact_mobile', 'status', 'tag')

    def save(self, **kwargs):
        data = self.data
        post = Post.objects.create(author=User.objects.get(id=data.get('author')),
                                    title=data.get('title'),
                                    content=data.get('content'),
                                    reward=data.get('reward'),
                                    contact_mobile=data.get('contact_mobile'),
                                    status=data.get('status'),
                                    tag=Tag.objects.get(id=data.get('tag')))
        return post

Get请求的API如下:

class GetAllOrdersAPI(generics.ListAPIView):
    '''
    返回所有用户对应的所有的订单
    '''
    serializer_class = PostSerializer
    def get_queryset(self):
        """
        This view should return a list of all the orders for
        all the user.
        """
        return Post.objects.all()

model.py中的模型如下:

class Post(BaseModel):
    """
    需求贴
    """
    author = models.ForeignKey(User, verbose_name='发帖人')
    developer = models.ForeignKey(User, verbose_name='开发者', null=True, blank=True, on_delete=models.CASCADE)
    title = models.CharField('标题', max_length=256)
    content = models.TextField('内容')
    reward = models.DecimalField('报酬', max_digits=10, decimal_places=2)
    contact_mobile = models.CharField('联系号码', max_length=11)
    status = models.IntegerField(verbose_name='帖子状态', choices=STATUS)
    tag = models.ForeignKey(Tag, null=True, blank=True, on_delete=models.CASCADE, verbose_name='标签')

好吧,说的可能有点乱,就是如何让Ajax的GET请求返回的json数据能带上一个存储对象的id?需要修改序列化的代码,还是API相关的代码?因为如果不能返回id,就没法唯一确定一个对象。

解决方案

fields = ('author', 'title', 'content', 'reward', 'contact_mobile', 'status', 'tag') 这里没有指定 id 字段

这篇关于django-rest-framework - Django获取模型对象中的objects所对应的JSON数据如何同时获得他们默认生成的id?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆