【发布时间】:2017-03-09 04:07:22
【问题描述】:
我有以下型号
class Molecule(models.Model):
mid = models.IntegerField(primary_key=True)
mol_name = models.CharField(max_length=2023, blank=True, null=True)
class Pubchem(models.Model):
molecule = models.OneToOneField('Molecule', primary_key=True, db_column='mid')
pnum = models.IntegerField(blank=False, null=False)
在views.py 中,我正在尝试获取具有mid、mol_name 和pnum 是否可用的查询集。
querySet1 = Molecule.objects.all()
querySet1 = querySet1.filter(
Q(mol_name__istartswith=currentInitial) |
Q(mol_name__istartswith=currentInitial.lower())
).distinct('mol_name')
querySet2 = Pubchem.objects.filter(molecule__mol_name__istartswith=currentInitial).select_related('molecule').order_by('molecule')
在 querySet2 中,并非所有分子都包括在内,在 Pubchem 中没有条目的分子将被忽略。在 querySet1 或 querySet2 中应该改进什么以在 querySet 中获取所有必需的信息?还是合并它们是更好的选择?如果有怎么办?
【问题讨论】:
-
我尝试使用链,但它使 2 种不同类型的模型成为一个查询集,并且不能用于分页。也会有重复的需要删除它们
-
我也尝试通过添加一列来使用 Value() 注释,但没有奏效。
-
也尝试了内容框架的方法,但是太复杂了,我觉得应该有更好的方法。但是没有用
-
第一条评论:
istartswith不区分大小写,所以我不知道你为什么在这里使用Q对象。其次,您能否举例说明您当前的示例到底做了哪些您不想要的操作? -
第一:是的,你是对的,在这种情况下不需要我尝试不同的东西,然后就这样离开了。它不会有所作为吗?第二:如果您看到此链接:dpaste.de/WGjV#L3,4,10,12,13 在 QuerySet2 中缺少标记为黄色,因为它们在 Pubchem 中没有 pnum 条目。但我也需要这些结果,我需要 mid、mol_name 以及 pnum 是否可用
标签: python django database django-queryset