gpt4 book ai didi

python - 从另一个模型获取值列表

转载 作者:行者123 更新时间:2023-12-01 07:11:20 25 4
gpt4 key购买 nike

我安装了一个第三方应用程序,它基本上有 5 个字段:id、name、state、geocode、geometry。

我创建了一个新应用程序,我只需要从其他模型导入“名称”字段中的值。

所以我基本上是这样做的:

from django.db import models
from django.contrib.auth.models import User
from django.contrib.gis.geos import Point
from brasil_municipios.models import Municipio #which is the third party app

class Escritorio(models.Model):
nomeescritiorio = models.CharField(max_length=255)
cidade = models.OneToOneField(Municipio.objects.values_list('name').order_by('name')[0:10], on_delete=models.PROTECT, null=True)

并收到此错误:

AssertionError: OneToOneField(<QuerySet [('ABADIA DE GOIÁS',), ('ABADIA DOS DOURADOS',), ('ABADIÂNIA',), ('ABAETETUBA',), ('ABAETÉ',), ('ABAIARA',), ('ABARÉ',), ('ABATIÁ',), ('ABAÍRA',), ('ABDON BATISTA',)]>) is invalid. First parameter to ForeignKey must be either a model, a model name, or the string 'self'

我已经尝试过其他方法来解决这个问题,使用filter()、get()等,但都遇到相同的错误。

最佳答案

I created a new app which I need to import only the values from the 'name' field from the other model.

您不会“从另一个模型导入值” - 这不是它的工作原理。您所做的是将模型链接在一起,以便底层的“escritorio”表记录知道与其相关的“municipio”表记录的主键(这就是 OneToOneField 实际执行的操作)。然后,从“escritorio”中存储的外键中,可以读取相关“municipio”记录的“name”值。

IOW,您只需将相关模型的名称传递给 OneToOne 字段,然后您就可以从遵循关系的 Escritorio 实例中获取相关的 Municipio 名称,即escrotorio.cidade.name

如果您在使用 Escritorio 模型时最常需要使用此值,则可以通过向 Escritorio 添加只读属性来优化可读性:

class Escritorio(models.Model):
nomeescritiorio = models.CharField(max_length=255)
cidade = models.OneToOneField(Municipio, on_delete=models.PROTECT)

@property
def name(self):
return self.cidade.name

它允许你只写escritorio.name(简单的快捷方式,真的)

并且您当然希望通过强制 ORM 在加载 escritorio 时始终加载相关的 municipio 值来优化性能,这样您就可以在单个数据库查询中获得所有内容,而不是需要一个查询来获取 escritorio,并需要第二个查询来获取相关的 municipio。您可以通过 using select_related() 执行此操作,可以在您知道需要名称时直接提供,也可以通过为您的 Escritorio 模型提供自定义管理器和查询集类来系统地提供。

注意:您当然必须为您感兴趣的每个 municipio 记录创建 escritorio 实例 - django 和您的 rdmbs 都不会自动为您执行此操作。

关于python - 从另一个模型获取值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58202748/

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