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