繁体   English   中英

Django: model 来自外键的外键

[英]Django: model ForeignKey from a ForeignKey

我想用 Django 做这样的事情:

Model1 定义了几种类型。

Model2 定义了一个名称(Model2 的键)和 select 来自 Model1 的一种类型。

Model3 获取Model2 中定义的名称和类型,并定义其他变量。

我试过这个,但它不起作用:

class Model1(models.Model):
  types = models.CharField(max_length=50)

class Model2(models.Model):
  name = models.CharField(max_length=50)
  types = models.ForeignKey(Model1, on_delete=models.CASCADE, null=True, blank=True)

class Model3(models.Model):
  name = models.ForeignKey(Model2, on_delete=models.CASCADE,related_name='name')
  types = models.ForeignKey(Model2, on_delete=models.CASCADE,related_name='types')
  other = models.CharField(max_length=50)

Model3 中的“类型”不起作用。 ¿有什么想法或替代方案吗? 谢谢!!

错误:

Reverse query name for 'Model3.name' clashes with field name 'Model2.name'.
    HINT: Rename field 'Model2.name', or add/change a related_name argument to the definition for field 'Model3.name'.
Reverse accessor for 'Model3.types' clashes with field name 'Model2.types'.
    HINT: Rename field 'Model2.types', or add/change a related_name argument to the definition for field 'Model3.types'.

正如@IgorMoraru所说,存储两个引用是没有意义的。 您可以通过“通过” Model2 object 访问它来获取type 。实际上,建模应该如下所示:

class Model1(models.Model):
  type = models.CharField(max_length=50)

class Model2(models.Model):
  name = models.CharField(max_length=50)
  type = models.ForeignKey(Model1, on_delete=models.CASCADE, null=True, blank=True)

class Model3(models.Model):
  name = models.ForeignKey(Model2, on_delete=models.CASCADE)
  other = models.CharField(max_length=50)

然后,您可以通过以下方式“通过”Model3 object 的Model2 Model3关联Model1 object:

my_model3.name.type

或者如果您希望将值存储在type字段中:

my_model3.name.type.type

暂无
暂无

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

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