gue*_*tli 7 django django-models
我得到这个例外:
django.core.exceptions.FieldError:
"SpecialPlugin"类中的本地字段"ticket"与基类"BasePlugin"中类似名称的字段发生冲突
这是我的模特:
class BasePlugin(models.Model):
ticket = models.OneToOneField('foobar.ticket', primary_key=True,
related_name='%(app_label)s_%(class)s')
class Meta(IndexImplementation.Meta):
abstract = True
# .. Other stuff which should be available for SpecialPlugin
# and other child classes.
class SpecialPlugin(BasePlugin):
ticket = models.OneToOneField('foobar.ticket', primary_key=True,
related_name='special')
Run Code Online (Sandbox Code Playgroud)
我只发现了这个注释,但在我的例子中,父类是抽象的.我不确定它是否适用于此.
我想给子类提供SpecialPlugin相关的名称"special",因为%(app_label)s_%(class)sBasePlugin 的相关name()会破坏旧代码.
有没有办法给SpecialPlugin.ticket相关的"特殊"?
v1k*_*k45 10
它可能看起来像一个丑陋的黑客,但你可以设置一个函数调用default_related_name参数而不是字符串.然后在子类/模型中覆盖该函数.
class BasePlugin(models.Model):
@staticmethod
def get_ticket_related_name():
return '%(app_label)s_%(class)s'
ticket = models.OneToOneField('foobar.ticket', primary_key=True,
related_name=get_ticket_related_name.__func__())
class Meta(IndexImplementation.Meta):
abstract = True
class SpecialPlugin(BasePlugin):
@staticmethod
def get_ticket_related_name():
return 'special'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1667 次 |
| 最近记录: |