Django从其他模型过滤

时间:2013-10-07 11:41:05

标签: django django-models django-queryset

例如,我有两个模型:

class Symbol(models.Model):
    rowID = models.CharField(max_length=64, primary_key=true)

class SymbolProperties(models.Model):
    symbol = models.ForeignKey(Symbol, to_field='rowID', db_column='symbol')
    some_value = models.IntegerField(default=0)

我希望使用Symbol字段过滤some_value个对象,但模型符号与SymbolProperties无关。
如果不在Symbol模型中创建外键,我可以这样做吗?

2 个答案:

答案 0 :(得分:2)

是。当您在一个模型上声明ForeignKey时,会向另一个模型添加反向关系(请参阅documentation)。

您可以将相关字段作为属性(symbol.symbolproperties_set或您使用模型字段定义中的related_name关键字参数定义的任何名称)进行访问,或者在查找中引用它:

Symbol.objects.filter(symbolproperties__some_value=5)

(添加distinct()以确保结果仅包含Symbol的唯一实例。)

答案 1 :(得分:2)

您可以从关系的任何一方获取对象。有关详细信息,请参阅:https://docs.djangoproject.com/en/1.5/topics/db/queries/#following-relationships-backward

尝试:

symbols = SymbolProperties.objects.filter(some_value=the_value).only('symbol')

这可能会导致返回的QuerySet中出现重复的symbol个实例。要摆脱这些,你需要创建一个set的结果。