如何在django中合并多个QuerySet?

时间:2016-10-26 17:06:24

标签: python django database django-queryset

我有以下模特

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可用的Query Set。

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中的所有必需信息?或者合并它们是更好的选择?如果是这样的话?

1 个答案:

答案 0 :(得分:1)

我认为你需要的是:

molecules = Molecule.objects.filter(
        mol_name__startswith=currentInitial
    ).select_related('pubchem')

#and now you have all molecules and some of them may have pubchems.
for molecule in molecules:
    print (molecule, molecule.pubchem.pnum if hasattr(molecule, 'pubchem') else None)