[英]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與User的ForeignKey
關系為u_a
與u_a
關系為u_a
。 但是B和C是A的子代。
所以在我看來,好像不重復您的代碼已被違反。 如何克服呢?
要變通解決此問題,在您的模型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.