Ben*_*rts 11 django factory django-models
我正在为我的所有模型添加一个slug用于序列化,所以我定义了一个使用django_autoslug中的AutoSlugField的抽象基类.
class SluggerModel(models.Model):
slug = AutoSlugField(unique=True, db_index=False)
class Meta:
abstract=True
Run Code Online (Sandbox Code Playgroud)
我还定义了一个自定义管理器和一个natural_key方法,此时我有大约20个子类,因此除了定义字段的单行之外,还有一些使得使用抽象基本模型的东西值得.
但是,我希望能够切换一些默认参数来初始化AutoSlugField某些子模型,同时仍然可以使用抽象基类.例如,我希望其中一些人使用该populate_from选项,指定其特定模型中的字段,而其他人则使用db_index=True默认值(False).
我开始尝试使用自定义Metaclass,使用在每个子模型的内部Meta类中定义的自定义选项,但这成为了老鼠的巢.我愿意接受有关该方法的指导,或任何其他建议.
Dan*_*aab 13
一种解决方案是动态构建抽象基类.例如:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1030 次 |
| 最近记录: |