繁体   English   中英

DJANGO导入字段以从另一个模型进行建模

[英]DJANGO importing fields to model from another model

我有以下模型,我尝试将Especie.zonas中的向量作为模型Zona中的一个字段。

Especie.zonas是Zonas( Zona模型)的矢量,我希望它与EspecieZona模型具有OneToOne关系。

Models.py

class Zona(models.Model):
    codigo          = models.CharField(max_length=120)
    area            = models.CharField(max_length=120)
    especies        = models.ManyToManyField("Especie", blank=True)

        def __str__(self):
            return self.codigo
        def get_especies(self):
            return self.especies.all().values_list('nome', flat=True)

    class Especie(models.Model):
        nome            = models.CharField(max_length=120)
        nome_latino     = models.CharField(max_length=120)
        data_insercao   = models.DateTimeField(auto_now_add=True)
        actualizacao    = models.DateTimeField(auto_now=True)
        zonas           = models.ManyToManyField("Zona",blank=True )

        def get_zonas(self):
            return self.zonas.all().values_list('codigo', flat=True)
        def __str__(self):
            return self.nome

    class EspecieZona(models.Model):
        idEspecie          = models.OneToOneField("Especie")
        here_is_my_problem = models.Especie.zonas()
        idZona             = models.OneToOneField("Especie.zonas")
        fechado            = models.BooleanField()
        def __str__(self):
            return str(self.idEspecie)+' em '+str(self.idZona)

提前致谢!

我不确定您的意图。 将在模型之间建立关系(因此,您不能OneToOne到类的字段)。 据我了解,EspecieZona将一个Especie实例与一个Zona实例相关联,但是您还希望轻松获得与您通过EspecieZona访问的某个Especie实例相关的所有Zona实例。

在我看来,您应该完全删除here_is_my_problem字段,并在EspecieZona中使用外键指向Especie和Zona,而不要使用OneToOne。 使用外键,您可以使用从Zona到Especie的ManyToMany字段(反之亦然。您只能在关系的一侧声明MtM字段,以您认为更合适),然后将EspecieZona用作“直通”字段对于这种关系(可能对Especie和Zona具有unique_together约束)。 这样,您可以建立这样的关系:

“每个物种可以在多个区域上,并且每个区域可以具有多个物种 (通过MtM关系描述。 此外,对于每个区域和在其中找到的物种,在该区域中可能已经记录(或未记录)每个物种(?在“到”模型来描述,EspecieZona,你不知道我理解的意思fechado这里。在任何情况下,“通过”的模式可以让你描述关于两种模式之间的关系,无论细节)“。

然后,为了从EspecieZona实例中检索Especies.zonas,您可以执行一些someSpecificEspecieZona.especie.zonas.all() (假设zonas在Especie中声明为MtM字段),这将为您提供所有与该物种(据我了解您的模型)

我建议您仔细阅读关系字段的文档https://docs.djangoproject.com/zh-CN/1.11/ref/models/fields/#module-django.db.models.fields.related,以便您了解有关所有内容的详细信息的工作原理,例如如何使用ManyToManyField.through,以及在需要时可能涉及反向关系。

(同样,也许这只是在此处复制粘贴代码时的一个错误,但是缩进看起来是错误的。不同的模型应该在那里具有相同的缩进级别)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM