django模型返回唯一值

时间:2016-05-02 10:55:09

标签: django unique models

我的模型中有两个类:

class Block(models.Model):
    block_name = models.CharField(max_length=20)

class Flat(models.Model):
    block = models.ForeignKey(Block)
    flat_name = models.CharField(max_length=20)

它为我提供了以下名称的示例块:

block1
block2
block3

以及具有以下名称的公寓:

pink_flat FK to block1
red_flat FK to block2
yellow_flat FK to block3
pink_flat FK to block2
pink_flat FK to block3

问题:

我应该在Block类中创建什么函数,以便我可以返回所有Flat唯一名称,例如对于上面的示例,我想返回pink_flat, red_flat, yellow_flat并跳过pink_flat不止一次出现的事实。

所以,基本上我想为每个Block返回唯一的flat_names

我知道我可以在我的Block类中创建函数,所以我可以过滤Flats:

def flats_related(self):
        return Flat.objects.filter(block=self.id)

2 个答案:

答案 0 :(得分:1)

您只需使用.distinct()

即可
Flat.objects.order_by('flat_name').distinct('flat_name')

**编辑:**  上面的代码仅适用于PostgreSQL。

答案 1 :(得分:0)

对于每个街区 block.flat_set().all()应该为你提供该区块的所有单位。然后,您只能使用distinct()保留唯一的。全部一起: block.flat_set().all().distinct('flat_name')

你可以在这里阅读: https://docs.djangoproject.com/en/1.9/topics/db/queries/#following-relationships-backward