【问题标题】:How to make a one to many relationship in Django/Mysql?如何在 Django/Mysql 中建立一对多关系?
【发布时间】:2020-11-18 20:33:08
【问题描述】:

我想了解如何在 Django/Mysql 中建立一对多关系?

这里是 models.py(代码如下)

class Flora2Estado(models.Model):
    estado = models.OneToOneField(Estados, models.DO_NOTHING, primary_key=True)
    especie = models.ForeignKey('Listaflor', models.DO_NOTHING)
    class Meta:
        managed = False
        db_table = 'flora2estado'
        unique_together = (('estado', 'especie'),)


class Listaflor(models.Model):
    especie = models.OneToOneField(Flora2Estado, models.DO_NOTHING, primary_key=True)
    familia = models.ForeignKey(Familia, models.DO_NOTHING, blank=True, null=True)
    nome = models.CharField(db_column='especie', max_length=255, blank=True, null=True)  # Field renamed because of name conflict.
    class Meta:
        managed = False
        db_table = 'listaflor'

class Estados(models.Model):
    estado_id = models.AutoField(primary_key=True)
    estado_nome = models.CharField(max_length=100, blank=True, null=True)
    class Meta:
        managed = False
        db_table = 'estados

【问题讨论】:

    标签: django foreign-keys relational-database


    【解决方案1】:

    我认为您想要做的是通过另一个名为 Flora2Estado 的类在 Listaflor 和 Estados 之间建立 Many2Many 关系。 Django M2M relation

    class Estados(models.Model):
        estado_id = models.AutoField(primary_key=True)
        estado_nome = models.CharField(max_length=100, blank=True, null=True)
    
        class Meta:
            managed = False
            db_table = 'estados'
    
    
    class Listaflor(models.Model):
        especie_id = models.AutoField(primary_key=True)
        nome = models.CharField(db_column='especie', max_length=255, blank=True, null=True)
        estados = models.ManyToManyField(Estados, through='Flora2Estado')
    
        class Meta:
            managed = False
            db_table = 'listaflor'
    
    
    class Flora2Estado(models.Model):
        estado = models.ForeignKey(Estados, on_delete=models.DO_NOTHING)
        especie = models.ForeignKey(Listaflor, on_delete=models.DO_NOTHING)
    
        class Meta:
            managed = False
            db_table = 'flora2estado'
            unique_together = (('estado', 'especie'),)
    

    【讨论】:

    • 嘿!非常感谢您的回复。我使用了您建议的代码,但出现错误:错误:: (admin.E109) 'list_display[6]' 的值不能是 ManyToManyField。你我该如何解决?再次,非常感谢
    • 发生这种情况是因为在您的 admin.py 中,您尝试将 list_display 与 M2M 字段一起使用,但这是不允许的。这篇其他帖子可以帮助您修复它link
    • 非常感谢您的帮助!有效!你救了我!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多