Мне нужно выбрать подмножество внешнего ключа, но ограничивать его только подмножеством. Это необработанный запрос, который использовался в старой базе данных PHP;Django, подмножество внешнего ключа
SELECT a.name FROM character_trait b
LEFT JOIN trait a ON b.id_trait = a.id
WHERE b.id_character = 1
AND a.id_traittype = 10
Все таблицы, характер, черта, traittype и character_trait доступны, но я не могу понять, как сделать это в Djando. Моя идея была такова;
traits = CharacterTrait.objects.filter(id_character = character, id_trait.id_traittype = 10)
Но это просто дает ошибку «ключевое слово не может быть выражением». Я могу сделать это очень уродливо и просто перебирать полученные «черты», используя цикл for, подобный этому;
traits = CharacterTrait.objects.filter(id_character = character)
for t in traits:
print t.id_trait.id_traittype.id
if t.id_trait.id_traittype.id == 10:
print "Got One"
Изменить, определения модулей;
class Trait(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
id_traittype = models.ForeignKey(Traittype, null=True, db_column = 'id_traittype')
name = models.CharField(max_length=32)
class Meta:
managed = False
db_table = 'trait'
def __unicode__(self):
return self.name
class Traittype(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
name = models.CharField(max_length=64)
class Meta:
managed = False
db_table = 'traittype'
def __unicode__(self):
return self.name
class Trait(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
id_traittype = models.ForeignKey(Traittype, null=True, db_column = 'id_traittype')
name = models.CharField(max_length=32)
class Meta:
managed = False
db_table = 'trait'
def __unicode__(self):
return self.name
class CharacterTrait(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
##id_character = models.IntegerField()
## id_trait = models.IntegerField()
id_character = models.ForeignKey(Werewolfcharacter, null=True, db_column = 'id_character')
id_trait = models.ForeignKey(Trait, null=True, db_column = 'id_trait')
class Meta:
managed = False
db_table = 'character_trait'
def __unicode__(self):
return self.id_trait.name
Вы могли бы опубликовать свои определения моделей? django filter keywoards используют '__' 2 под значениями для привязки fk – dm03514
Готово, добавлены модули. – Eloque