例如,我有两个模型:
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模型中创建外键,我可以这样做吗?
答案 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
的结果。