我的模型中有两个类:
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)
答案 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