如何在Django模型中创建自定义函数?

时间:2019-07-15 09:08:30

标签: python django python-3.x django-models django-views

我有一个Django模型

class UserInfluencerGroupList(models.Model):
    list_name = models.CharField(max_length=255)
    influencers = models.ManyToManyField(Influencer, blank=True)
    user = models.ForeignKey(MyUser, on_delete = models.CASCADE)

    def __str__(self):
        return self.list_name

我的视图函数是:

def get_lists(request,user_email):
    """Get all the lists made by user"""
    try:
        user_instance = MyUser.objects.get(email=user_email)
    except MyUser.DoesNotExist:
        return HttpResponse(json.dumps({'message':'User not found'}),status=404)

    if request.method == 'GET':

        influencers_list = UserInfluencerGroupList.objects.all().order_by('id').filter(user=user_instance)
        influencers_list = serializers.serialize('json',influencers_list, fields =['id','influencers','list_name'], indent=2, use_natural_foreign_keys=True, use_natural_primary_keys=True)

        return HttpResponse(influencers_list,content_type='application/json',status=200)
    else:
        return HttpResponse(json.dumps({'message':'No lists found'}), status=400)

除了列表中的常规数据外,我还想计算列表中每个影响者的total_followers,total_likes和total_comments。有影响力的人模型具有针对“总喜欢”,“评论”和“关注者”的字段。

我应该如何编写一个函数来计算和显示该函数以及列表返回的所有其他数据

1 个答案:

答案 0 :(得分:1)

如果您要返回自己选择的json或/并且要创建自己的rest api,则应考虑使用Django Rest Framework

另一种方法是全部手动创建json,即构建字典,然后使用json.dumps。

(如果您真的想“手动”阅读答案Convert Django Model to dict

django序列化器不支持您要执行的操作:

option for serializing model properties (won't fix)

未修复的报价: “ 恐怕我看不到你提议的好处。 存在序列化框架,可轻松实现Django的序列化 DB支持的对象-不适用于_any_的任意序列化 对象以及派生的属性(例如您突出显示的属性) 示例不会向的序列化表示中添加任何内容 数据库支持的对象。 ..”