簡體   English   中英

如何動態制作Django模型字段的參數

[英]How to make dynamically parameters django models fields

這段代碼是許多人的抽象類

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

我想要這樣related_name = self.default_related_name + '_name_field'如下

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__方法中創建該字段,但是它不起作用)。

如果您可以使用子類名稱而不是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

預保存信號就是您想要的。

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

在將其保存到數據庫之前,您可以應用所需的所有更改。 :)

這是一個示例,其中我將每個單詞的首字母大寫並創建一個詞條。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM