django 模型 return 个唯一值

django model return unique values

我的模型中有两个 class:

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 class 中创建什么函数,这样我就可以 return 所有 Flat 的唯一名称,例如对于上面的示例,我想 return pink_flat, red_flat, yellow_flat 并跳过 pink_flat 不止一次出现的事实。

所以,基本上我想 return 每个块 flat_names 唯一

我知道我可以在我的 Block class 中创建函数,这样我就可以过滤 Flats:

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

您可以简单地使用 .distinct()

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

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

对于每个块 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