Sql 使用select_related()的Django过滤器

Sql 使用select_related()的Django过滤器,sql,django,django-models,Sql,Django,Django Models,我有一个非常有效的问题: campaignFixtures = UserSelection.objects.select_related().filter(user=currentUserID,campaignno=currentCampaignNo).order_by('fixtureid__fixturedate')[:1] 但是,我需要从另一个表中筛选字段,如下所示: campaignFixtures = UserSelection.objects.select_rela

我有一个非常有效的问题:

    campaignFixtures = UserSelection.objects.select_related().filter(user=currentUserID,campaignno=currentCampaignNo).order_by('fixtureid__fixturedate')[:1]
但是,我需要从另一个表中筛选字段,如下所示:

    campaignFixtures = UserSelection.objects.select_related().filter(user=currentUserID,campaignno=currentCampaignNo,straightredfixture__fixturematchday=18).order_by('fixtureid__fixturedate')[:1]
class StraightredFixture(models.Model):
    fixtureid = models.IntegerField(primary_key=True)
    home_team = models.ForeignKey('straightred.StraightredTeam', db_column='hometeamid', related_name='home_fixtures')
    away_team = models.ForeignKey('straightred.StraightredTeam', db_column='awayteamid', related_name='away_fixtures')
    fixturedate = models.DateTimeField(null=True)
    fixturestatus = models.CharField(max_length=24,null=True)
    fixturematchday = models.ForeignKey('straightred.StraightredFixtureMatchday', db_column='fixturematchday')
    spectators = models.IntegerField(null=True)
    hometeamscore = models.IntegerField(null=True)
    awayteamscore = models.IntegerField(null=True)
    homegoaldetails = models.TextField(null=True)
    awaygoaldetails = models.TextField(null=True)
    hometeamyellowcarddetails = models.TextField(null=True)
    awayteamyellowcarddetails = models.TextField(null=True)
    hometeamredcarddetails = models.TextField(null=True)
    awayteamredcarddetails = models.TextField(null=True)
    soccerseason = models.ForeignKey('straightred.StraightredSeason', db_column='soccerseasonid', related_name='fixture_season')


    def __unicode__(self):
        return self.fixtureid

    class Meta:
        managed = True
        db_table = 'straightred_fixture'

class UserSelection(models.Model):
    userselectionid = models.AutoField(primary_key=True)
    campaignno = models.CharField(max_length=36,unique=False)
    user = models.ForeignKey(User, related_name='selectionUser')
    teamselection1or2 = models.PositiveSmallIntegerField()
    teamselectionid = models.ForeignKey('straightred.StraightredTeam', db_column='teamselectionid', related_name='teamID')
    fixtureid = models.ForeignKey('straightred.StraightredFixture', db_column='fixtureid')


    class Meta:
        managed = True
        db_table = 'straightred_userselection'
但是,我收到以下错误:

Cannot resolve keyword 'straightredfixture' into field. Choices are: campaignno, fixtureid, fixtureid_id, teamselection1or2, teamselectionid, teamselectionid_id, user, user_id, userselectionid
模型如下:

    campaignFixtures = UserSelection.objects.select_related().filter(user=currentUserID,campaignno=currentCampaignNo,straightredfixture__fixturematchday=18).order_by('fixtureid__fixturedate')[:1]
class StraightredFixture(models.Model):
    fixtureid = models.IntegerField(primary_key=True)
    home_team = models.ForeignKey('straightred.StraightredTeam', db_column='hometeamid', related_name='home_fixtures')
    away_team = models.ForeignKey('straightred.StraightredTeam', db_column='awayteamid', related_name='away_fixtures')
    fixturedate = models.DateTimeField(null=True)
    fixturestatus = models.CharField(max_length=24,null=True)
    fixturematchday = models.ForeignKey('straightred.StraightredFixtureMatchday', db_column='fixturematchday')
    spectators = models.IntegerField(null=True)
    hometeamscore = models.IntegerField(null=True)
    awayteamscore = models.IntegerField(null=True)
    homegoaldetails = models.TextField(null=True)
    awaygoaldetails = models.TextField(null=True)
    hometeamyellowcarddetails = models.TextField(null=True)
    awayteamyellowcarddetails = models.TextField(null=True)
    hometeamredcarddetails = models.TextField(null=True)
    awayteamredcarddetails = models.TextField(null=True)
    soccerseason = models.ForeignKey('straightred.StraightredSeason', db_column='soccerseasonid', related_name='fixture_season')


    def __unicode__(self):
        return self.fixtureid

    class Meta:
        managed = True
        db_table = 'straightred_fixture'

class UserSelection(models.Model):
    userselectionid = models.AutoField(primary_key=True)
    campaignno = models.CharField(max_length=36,unique=False)
    user = models.ForeignKey(User, related_name='selectionUser')
    teamselection1or2 = models.PositiveSmallIntegerField()
    teamselectionid = models.ForeignKey('straightred.StraightredTeam', db_column='teamselectionid', related_name='teamID')
    fixtureid = models.ForeignKey('straightred.StraightredFixture', db_column='fixtureid')


    class Meta:
        managed = True
        db_table = 'straightred_userselection'

任何帮助都将不胜感激,艾伦。

我认为问题与
所选内容无关。您只是试图使用错误的查找值进行筛选。不如改用
fixtureid\uu fixturematchday
过滤:

UserSelection.objects.select_related().filter(user=currentUserID, campaignno=currentCampaignNo, fixtureid__fixturematchday=18).order_by('fixtureid__fixturedate')[:1]
既然您只想获取一个对象,为什么不使用获取一个对象而不是一个包含一个项的查询集:

campaignFixture = UserSelection.objects.select_related("fixtureid").filter(...).order_by(...).first()

根据您的模型,关系是fixtureid

 UserSelection.objects.select_related().filter(user=currentUserID,campaignno=currentCampaignNo,fixtureid__fixturematchday=18)

非常感谢,我是如此接近。非常感谢您提供的额外信息。确实,这表明您应该更改模型中的字段名。@alantingey-不用担心,您唯一需要类名的时候是通过反向关系查找时,其中没有指定相关名称