【问题标题】:tastypie group by value美味派按价值分组
【发布时间】:2018-07-08 20:18:32
【问题描述】:

使用美味派。我有以下简单模型:

class Autocomplete(models.Model):
    tablename = models.CharField(max_length=50, blank=True) #
    fieldname = models.CharField(max_length=25, blank=True) #
    value = models.CharField(max_length=50, blank=True) #

    class Meta:
        managed = False
        db_table = 'autocomplete'

还有以下ModelResource:

class AutocompleteResource(ModelResource):
    counter = fields.CharField()

    class Meta:
        queryset = Autocomplete.objects.values('fieldname').annotate(counter=Count('fieldname'))
        resource_name = 'autocomplete'

我的目标是按字段名分组并返回如下结果:

fieldname  | counter 
-----------+-------
somefield1 |   177
somefield2 | 13926
somefield3 |  7331

相反,sauthenticpie 会返回以下内容:

error_message: "invalid literal for int() with base 10: ''",

我可能在这里遗漏了一些非常基本的东西。它是否正在寻找 id 但找不到它,因为 values() 调用已将其删除?如何返回与原始模型具有不同字段的结果?

我花了太多时间试图弄清楚这一点,希望你们能指出我正确的方向。

谢谢!

【问题讨论】:

    标签: django group-by tastypie


    【解决方案1】:

    尝试使用脱水。代码将如下所示:

    class AutocompleteResource(ModelResource):
        counter = fields.CharField(readonly=True)
    
        class Meta:
            queryset = Autocomplete.objects.all()
            resource_name = 'autocomplete'
    
        def get_object_list(self, request):
            return super(AutocompleteResource, self).get_object_list(request).annotate(counter=Count('fieldname', distinct=True))
    
        def dehydrate_counter(self, bundle):
            return bundle.obj.counter
    

    另一种方法是将“计数器”作为属性传递:

    class AutocompleteResource(ModelResource):
        counter = fields.CharField(readonly=True, attribute='counter')
    
        class Meta:
            queryset = Autocomplete.objects.values('fieldname').annotate(counter=Count('fieldname'))
            resource_name = 'autocomplete'
    

    这来自文档:

    可选地接受一个属性,它应该是实例属性的字符串,或者在脱水期间可从对象调用,或在水合期间将数据推送到对象上。默认为无,表示将手动访问数据。

    【讨论】:

      猜你喜欢
      • 2012-04-18
      • 1970-01-01
      • 2012-10-30
      • 2014-01-23
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 2012-01-29
      • 1970-01-01
      相关资源
      最近更新 更多