gpt4 book ai didi

python - 模型方法中的django反向查找

转载 作者:太空宇宙 更新时间:2023-11-04 09:19:24 26 4
gpt4 key购买 nike

Google 有很多在交互式提示中进行反向查找的示例,但没有一个是在 django 模型中作为一种方法进行的。

我有以下 models.py 文件:

class Client(models.Model):
...

def __unicode__(self):
return ???

class ClientDetails(models.Model):
client = models.ForeignKey(Client, null=True)
created = models.DateTimeField(default=datetime.now)
created_by = models.ForeignKey(User, null=True)
name_title = models.CharField(max_length=3, choices=NAME_TITLE_CHOICES)
first_name = models.CharField(max_length=40)
middle_name = models.CharField(max_length=40)
last_name = models.CharField(max_length=40)
...

如何让客户端方法从 ClientDetails 返回 last_name?

最佳答案

如果 ClientDetails 对象只应与单个 Client 对象相关联,那么我会将您的 FK 更改为 OneToOneField,这将为您提供一个简洁的反向访问器,该访问器只能在给定的 Client 及其关联的 ClientDetails 之间进行链接.然后你可以这样做:

try:
return self.clientdetails.last_name
except ClientDetails.DoesNotExist:
##handle it here, returning a graceful message

或者,如果您将其保留为 FK,则您必须执行以下操作:

try:
self.clientdetails_set.all()[0].last_name
except IndexError, e:
## handle exception here

但是在这里使用 FK 是脆弱的并且不是很好的形式(正如异常处理所暗示的那样:如果没有返回任何内容,那么您将得到一个 IndexError。此外,可能有多个 ClientDetails 对象链接到该 Client ,您只会在此处获得第一个的详细信息。)

所以,我真的会推荐使用 OneToOneField 而不是 FK。 (所有 OneToOneField 基本上都是一个 FK,上面设置了 unique=True 和一些比标准 FK 更整洁的访问器)

关于python - 模型方法中的django反向查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4646352/

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