1

例如我有两个模型:

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,但模型符号与符号属性无关。
我可以在符号模型中不创建外键的情况下做到这一点吗?

4

2 回答 2

3

是的。当您声明ForeignKey一个模型时,反向关系会添加到另一个模型(请参阅文档)。

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

Symbol.objects.filter(symbolproperties__some_value=5)

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

于 2013-10-07T11:47:32.480 回答
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结果。

于 2013-10-07T11:56:20.873 回答