簡體   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