gpt4 book ai didi

Django ORM : Override related_name of Field in Child Class

转载 作者:行者123 更新时间:2023-12-04 05:37:26 26 4
gpt4 key购买 nike

我得到这个异常:

django.core.exceptions.FieldError:

Local field 'ticket' in class 'SpecialPlugin' clashes with field of similar name from base class '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')

我只是 found this note,但在我的情况下,父类是抽象的。我不确定它是否适用于此。

我想给子类 SpecialPlugin指定一个相关的名称“special”,因为BasePlugin的相关名称( %(app_label)s_%(class)s)会破坏旧代码。

有没有办法为SpecialPlugin.ticket提供related_name“special”?

最佳答案

更新:

可以使用Django的 default_related_name meta选项完成类似的操作。

它可能看起来很丑陋,但是您可以将函数调用设置为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'

关于Django ORM : Override related_name of Field in Child Class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42899817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com