[英]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.