从一个应用程序获取字段名称到 django 中的另一个应用程序
Posted
技术标签:
【中文标题】从一个应用程序获取字段名称到 django 中的另一个应用程序【英文标题】:get field name from one app to another app in django 【发布时间】:2021-03-28 15:36:06 【问题描述】:我们定义了两个应用程序:Manin_matrix
和 SW_matrix
。
我们希望 Main_matrix
应用内 models.py
的类 GENERAL_t
中的字段名称 (project_name
) 出现在 SW_matrix app
的 models.py
文件中。
基本上,EDVT
的 SW_matrix
models.py
类中的 project_name_work
字段应与 Main_matrix
应用程序的 project_name
相同。
我们希望这样做,以便在 EDVT
表的数据库中,我们将获得相同的项目 ID 以及项目名称。
Main_matrix/models.py
class GENERAL_t(models.Model):
project_name = models.CharField(
blank=True,
null=True,
max_length=40,
verbose_name='Project_Name'
)
platform = models.CharField(
blank=True,
null=True,
max_length=40,
verbose_name='Platform SW'
)
SW_matrix/models.py
class EDVT(models.Model):
project_rel=models.ForeignKey(
GENERAL_t,
null=True,
on_delete=models.SET_NULL,
verbose_name="Choose Project"
)
project_name_work = models.ForeignKey(
GENERAL_t.project_name,
null=True,
verbose_name='Project_Name'
)
【问题讨论】:
【参考方案1】:您不需要这样做,FK 也不允许这样做。 FK 字段只是另一个表中一行的 ID,没有比这更复杂的了。
当使用像这样的ForeignKey
链接时,最好使用字符串,这样您就不必导入相关模型。字符串的格式为'<appname.ModelName>
例如,我将一个对象链接到这样的 (django) 内容类型;
source_content_type = models.ForeignKey(
verbose_name=_('source content type'),
to='contenttypes.ContentType',
on_delete=models.CASCADE
)
因此,将您的 EDVT
模型链接到 GENERAL_t
您会这样做;
class EDVT(models.Model):
general_t = models.ForeignKey(
to='Manin_matrix.GENERAL_t',
null=True,
verbose_name='general t'
)
如果EDVT
需要能够返回project_name
,您可以将其作为属性来实现。
class EDVT(models.Model):
project_rel = models.ForeignKey(
to='Manin_matrix.GENERAL_t',
null=True,
verbose_name='Project_Name'
)
@property
def project_name(self):
return self.project_rel.project_name
然后您可以通过EDVT.objects.first().project_name
访问它,或者如果您没有实现property
,您可以使用EDVT.objects.first().general_t.project_name
(或该模型上的任何其他字段)
【讨论】:
所以这里的 project_rel 在我们的例子中是 general_t,我们尝试使用 @property。但它显示了自我错误。而且它在数据库中也不起作用。无法保存字符串。刚刚显示id @DivyankGarg 有什么错误?而 ID 就是 ForeignKey 字段的全部内容。以上是关于从一个应用程序获取字段名称到 django 中的另一个应用程序的主要内容,如果未能解决你的问题,请参考以下文章