django通过select_related()

时间:2019-07-01 11:46:19

标签: django django-models

我有三个表usersblockscars

class User(models.Model):
    user_id = models.BigIntegerField(primary_key=True)
    is_out = models.CharField(default='N')
    birthday = models.DateTimeField()

class Cars(models.Model):
    user_id = models.ForeignKey(User, on_delete=models.CASCADE, db_column='user_id', related_name='cars')
    title = models.CharField()
    sold_out = models.CharField(default='N')

class Blocks(models.Model):
    user_id = models.BigIntegerField()
    target_user_id = models.ForeignKey(User, on_delete=models.CASCADE, db_column='target_user_id', related_name='blocks')

我要提取满足以下条件的汽车。

  1. 向不是is_out='N'的用户提供汽车
  2. 未售罄的汽车。 (sold_out='N'
  3. 与用户表id_10000相关的区块表的target_user_id列中不存在的用户汽车

要获得满足以上条件的汽车,我这样编写查询。

blocks = Blocks.objects.filter(user_id=10000).values_list('target_user_id', flat=True)
Cars.objects.filter(sold_out='N').select_related('user_id').filter(user_id__is_out='N').exclude(user_id__in=blocks)

但是您知道,如果块长大,可能是发生了性能问题。

问题

  1. 有什么办法可以加入方块吗?
  2. 以上查询是最好的情况?
  3. 我的架构有任何缺陷吗?

谢谢。

0 个答案:

没有答案