此代码是许多
的抽象类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__
方法中创建字段,但它不起作用。)
答案 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)