gpt4 book ai didi

Django - 我可以更改特定子模型的抽象基本模型中定义的字段的构造吗?

转载 作者:行者123 更新时间:2023-12-04 02:02:29 24 4
gpt4 key购买 nike

我为了序列化的目的向我的所有模型添加了一个 slug,所以我定义了一个抽象基类,它使用来自 django_autoslug 的 AutoSlugField| .

class SluggerModel(models.Model):
slug = AutoSlugField(unique=True, db_index=False)

class Meta:
abstract=True

我还定义了一个自定义管理器和一个 natural_key 方法,此时我有大约 20 个子类,因此除了定义字段的单行之外,还有几件事使使用抽象基本模型值得。

但是,我希望能够切换一些用于初始化 AutoSlugField 的默认参数。对于一些子模型,同时仍然能够利用抽象基类。例如,我希望其中一些使用 populate_from选项,指定来自其特定模型的字段,以及其他具有 db_index=True 的字段而不是我的默认值( False )。

我开始尝试使用自定义元类来做到这一点,利用在每个子模型的内部元类中定义的自定义选项,但这变成了一个老鼠窝。我愿意接受有关该方法的指导或任何其他建议。

最佳答案

一种解决方案是动态构造您的抽象基类。例如:

def get_slugger_model(**slug_kwargs):
defaults = {
'unique': True,
'db_index': False
}
defaults.update(slug_kwargs)

class MySluggerModel(models.Model):
slug = AutoSlugField(**defaults)

class Meta:
abstract = True

return MySluggerModel


class MyModel(get_slugger_model()):
pass


class MyModel2(get_slugger_model(populate_from='name')):
name = models.CharField(max_length=20)

关于Django - 我可以更改特定子模型的抽象基本模型中定义的字段的构造吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15098734/

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