如何制作动态参数django模型字段

时间:2017-07-31 23:14:26

标签: python django django-models

此代码是许多

的抽象类
Class Base (models.Model):
    Created_by = models.ForeignKey(User)
    Modified_by = models.ForeignKey(User, null=True)

我想要像这样related_name = self.default_related_name + '_name_field'的related_name 如下

Class Base(models.Model):
    Created_by = models.ForeignKey(User,
        related_name = self.default_related_name + '_created_by')
    Modified_by = models.ForeignKey(User,
        null = True,
        related_name = self.default_related_name + '_modified_by')

但我知道,我无法访问类的属性中的实例。 那么我可以用什么方法来重载以创建具有方法(或属性)的字段? (我尝试在__init__方法中创建字段,但它不起作用。)

2 个答案:

答案 0 :(得分:0)

如果您可以使用子类名称而不是default_related_name,那么它很简单:

related_name="%(class)s_created"

https://docs.djangoproject.com/en/1.8/topics/db/models/#be-careful-with-related-name

此外,由于基类是抽象模型,因此需要

class Meta:
    abstract = True

答案 1 :(得分:0)

您正在寻找预保信号。

供参考:https://docs.djangoproject.com/en/1.11/ref/signals/#pre-save

在将其保存到数据库之前,您可以应用所需的所有更改。 :)

这是一个例子,我将每个单词的第一个字母大写并创建一个slug。

def pre_save_city(sender, instance, *args, **kwargs):
instance.name = instance.name.title()
if not instance.slug:
    instance.slug = slugify(instance.name)

这就是你运行这个功能的方法:

pre_save.connect(pre_save_city,sender=City)