代码之家  ›  专栏  ›  技术社区  ›  rrauenza

Django:按特定的多对一值对行进行排序和筛选

  •  0
  • rrauenza  · 技术社区  · 8 年前

    在提供的模式中,我想排序 Records 由特定 Attribute 记录在案。我想在本地Django做这个。

    例子:

    全部查询 记录 (不管 Attribute.color ),但按排序 Attribute.value 哪里 属性颜色 'red' . 明显地 记录 缺少a 'red ' 属性 无法排序,因此可以将其解释为 NULL 或发送到末尾。

    每个 Record 保证有一个或零个 属性 特定颜色的(由 unique_together ). 鉴于这是一对多的关系 记录 可以有 Attributes 不止一种颜色的。

    class Record(Model):
        pass
    
    class Attribute(Model):
        color = CharField() # **See note below
        value = IntegerField()
        record = ForeignKey(Record)
    
        class Meta:
           unique_together = (('color', 'record'),)
    

    我还需要过滤 记录 通过 属性价值 属性颜色

    我愿意更改模式,但上面的模式似乎是表示我需要建模的内容的最简单的模式。

    我如何才能:

    • 全部查询 记录 它有一个 属性颜色 属于 '红色' 比如说 属性价值 属于 10
    • 全部查询 记录 并按 属性价值 关联的 属性 哪里 属性颜色 '红色' .

    **我已经在上面对其进行了简化--实际上 color 字段将是 ForeignKey AttributeDefinition ,但我认为现在这并不重要。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Jahongir Rahmonov    8 年前

    我认为这样做会奏效:

    record_ids = Attribute.objects.filter(color='red', value=10).values_list('record', flat=True) 
    

    record_ids = Attribute.objects.filter(color='red').order_by('value').values_list('record', flat=True)
    

    这将为您提供记录的ID。然后,您可以执行以下操作:

    records = Record.objects.filter(id__in=record_ids)
    

    希望这有帮助!