gpt4 book ai didi

Django:在没有外键字段的情况下使用 select_related

转载 作者:行者123 更新时间:2023-12-04 16:48:30 28 4
gpt4 key购买 nike

我有两个模型与我无法控制的数据库一起使用。两者都设置为 managed = False .第一个模型有一个字段,它是第二个模型的外键,但它实现为 CharField ,而不是 ForeignKey .

是否可以使用 select_related在第一个模型上访问关键的第二个模型的属性?

下面是一个例子:

class Foo(models.Model):
class Meta:
managed = False
fieldone = models.CharField(max_length=10)
myfk = models.CharField(max_length=20) # In practice, this points to Bar.localkey

class Bar(models.Model):
class Meta:
managed = False
localkey = models.CharField(max_length=20)
someotherattribute = models.CharField(max_length=100)

Foo.objects.all().select_related('Bar') # I know this won't work, but is there something that will?

最佳答案

不,因为没有任何关系。

但是,如果您(或出于某种原因的某人)已存储来自“相关”对象的 ID(或某些唯一值,例如 localkey),您可以基于它执行过滤器。

foo = Foo.objects.first()  # Pick one Foo object
foo_bar = Bar.objects.get(localkey=foo.myfk)

使它看起来像 select_related你可以试试这个:
class Foo(models.Model):
class Meta:
managed = False
fieldone = models.CharField(max_length=10)
myfk = models.CharField(max_length=20)

def bar(self):
return Bar.objects.get(localkey=self.myfk)
# probably you will need to manage common error when performing a .get()
# DoesNotExist and MultipleObjectsReturned

然后像这样使用:
foos = Foo.objects.all()

for foo in foos:
print foo.bar()

我不确定这是否是个好主意 但你可以装饰 .bar()方法作为 property :
...

@property
def bar(self):
return Bar.objects.get(localkey=self.myfk)

然后像这样调用它:
foo  # some random Foo object
foo.bar # this should return the 'related' Bar object

关于Django:在没有外键字段的情况下使用 select_related,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33289373/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com