【问题标题】:How to set forign key in relational database with one entity table and many relationship tables? (django)如何在一个实体表和多个关系表的关系数据库中设置外键? (django)
【发布时间】:2020-03-21 02:36:17
【问题描述】:

我正在用 Django 开发一个应用程序。

我的应用程序从 excel 表中输入一些信息,通过数据框对其进行详细说明,然后生成我想要构建的关系模型的表(数据框)。然后将这些数据帧中的数据保存在 django 模型中。

但是,我不知道如何编写 Django 模型以正确设置外键。

在我设计的关系模型中,只有一个实体表和多个关系表。

这是我想表达的:

以下是我使用脚本(数据框)准备的表格:

(如果我在 Microsoft Access 中复制粘贴表并通过查询链接它们,它会返回所需的结果——我试过了)。

这是我准备的模型:

class Things(models.Model): 
    ID = models.CharField(max_length=25, primary_key=True)
    Thing = models.TextField(blank=True, null=True)

class Has_other_form(models.Model): 
    ID_soggetto = models.CharField(max_length=25)
    ID_oggetto = models.CharField(max_length=25)

class Has_definition (models.Model): 
    ID_soggetto = models.CharField(max_length=25)
    ID_oggetto = models.CharField(max_length=25)

class Has_source (models.Model): 
    ID_soggetto = models.CharField(max_length=25)
    ID_oggetto = models.CharField(max_length=25)

但是不知道哪些字段设置为 ForeignKey 以及如何设置参数。

我试过了:

class Things(models.Model): 
    ID = models.CharField(max_length=25, primary_key=True)
    Thing = models.TextField(blank=True, null=True)

class Has_other_form(models.Model): 
    ID_soggetto = models.ForeignKey('Things', on_delete=models.SET_NULL)
    ID_oggetto = models.ForeignKey('Things', on_delete=models.SET_NULL)

class Has_definition (models.Model): 
    ID_soggetto = models.ForeignKey('Things', on_delete=models.SET_NULL)
    ID_oggetto = models.ForeignKey('Things', on_delete=models.SET_NULL)

class Has_source (models.Model): 
    ID_soggetto = models.ForeignKey('Things', on_delete=models.SET_NULL)
    ID_oggetto = models.ForeignKey('Things', on_delete=models.SET_NULL)

但它会返回以下错误:

“Has_source.ID_object”的反向访问器与反向冲突 'Has_source.ID_subject' 的访问器。

“Has_definition.ID_object”的反向访问器与反向冲突 'Has_definition.ID_subject' 的访问器。

“Has_other_form.ID_object”的反向访问器与反向冲突 'Has_other_form.ID_subject' 的访问器。

这让我觉得 Django 无法处理同一个实体表是同一个关系表的两个外键的目标的模型。

我说的对吗?如何使用 Django 模型来表示我的关系模式?

【问题讨论】:

    标签: django-models foreign-keys


    【解决方案1】:

    我想我通过改变模型解决了这个问题:

    class Things(models.Model): 
        ID_subject = models.ForeignKey('Things', related_name='%(class)s_as_subject', on_delete=models.CASCADE)
        ID_object = models.ForeignKey('Things', related_name='%(class)s_as_object', on_delete=models.CASCADE)
    
    class Has_other_form(models.Model): 
        ID_subject = models.ForeignKey('Things', related_name='%(class)s_as_subject', on_delete=models.CASCADE)
        ID_object = models.ForeignKey('Things', related_name='%(class)s_as_object', on_delete=models.CASCADE)
    
    class Has_definition (models.Model): 
        ID_subject = models.ForeignKey('Things', related_name='%(class)s_as_subject', on_delete=models.CASCADE)
        ID_object = models.ForeignKey('Things', related_name='%(class)s_as_object', on_delete=models.CASCADE)
    
    class Has_source (models.Model): 
        ID_subject = models.ForeignKey('Things', related_name='%(class)s_as_subject', on_delete=models.CASCADE)
        ID_object = models.ForeignKey('Things', related_name='%(class)s_as_object', on_delete=models.CASCADE)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-03
      • 2011-10-03
      • 2014-07-09
      • 2015-11-05
      • 1970-01-01
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      相关资源
      最近更新 更多