某些字段的计算表示形式上的过滤器

2024-06-14 04:11:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我的模型中有三个数字列,它们一起创建一个字符串,并呈现给用户:

class Location(models.Model):
    aisle = models.PositiveIntegerField()
    rack = models.PositiveIntegerField()
    plank = models.PositiveIntegerField()

    def __unicode__(self):
         return "{a:02}{r:02}{p:02}".format(a=self.aisle, r=self.rack, p=self.plank)

现在我想过滤这个字符串的(部分),所以假设我有三个位置,010101010102010201,我想过滤0101,我只想选择前两个

我将如何做到这一点,我研究了Q对象和available database functions,但没有找到解决方案


Tags: 字符串用户模型selfmodelmodelsdefunicode
2条回答

不能对属性执行筛选,必须对字段执行筛选。 在这种情况下,我认为这将满足您的要求,因为unicode只是一个格式化形式的字段中的实际整数值:

Location.objects.filter(aisle=1, rack=1)

经过大量的实验,我设法用Func实现了这一点:

class LocationLabel(Func):
    function = 'CONCAT'
    template = '%(function)s(RIGHT(CONCAT(\'00\',%(expressions)s),2))'
    arg_joiner = '),2), RIGHT(CONCAT(\'00\','

models.Location.object.
   annotate(locationlabel=
        LocationLabel('aisle','rack','plank', output_field=CharField())
   ).
   filter(locationlabel__icontains=query)

相关问题 更多 >