簡體   English   中英

Django:如何為繼承的父模型創建動態的related_name?

[英]Django: How to create a dynamic related_name for an inherited parent model?

我有4個型號:

class User(models.Model):
    name = models.CharField(max_length=255)

class A(models.Model):
    user= models.ForeignKey("User", related_name="u_a", on_delete=models.CASCADE)
    title = models.CharField(max_length=255)

class B(A):
    user= models.ForeignKey("User", related_name="u_b", on_delete=models.CASCADE) 
    #isn't the code repeated???
    b_field = CharField(max_length=255)

class C(A):
    user= models.ForeignKey("User", related_name="u_c", on_delete=models.CASCADE) 
    #isn't the code repeated???
    c_field = CharField(max_length=255)

在這里,A與UserForeignKey關系為u_au_a關系為u_a 但是BCA的子代。

所以在我看來,好像不重復您的代碼已被違反。 如何克服呢?

要變通解決此問題,在您的模型class A(models.Model) ,該值的一部分應包含'%(app_label)s' 和/或 '%(class)s' 看到文件

'%(class)s'被替換為使用該字段的子類的小寫名稱。

'%(app_label)s'由子類所在的應用程序的小寫'%(app_label)s'替換。 每個安裝的應用程序名稱必須唯一,並且每個應用程序內的模型類名稱也必須唯一,因此最終的名稱將不同。

class A(models.Model):
    user= models.ForeignKey("User", related_name="%(class)s_set", 
          on_delete=models.CASCADE)
    #user= models.ForeignKey("User", related_name="%(app_label)s_%(class)s_set", 
          #on_delete=models.CASCADE)
    title = models.CharField(max_length=255)

class B(A):
    b_field = CharField(max_length=255)

class C(A):
    c_field = CharField(max_length=255)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM