[英]Mixin Field into Existing and uneditable django model
我想將一個字段混入一個我不想編輯的現有模型中(它來自第三方項目,而我希望保持該項目不變)。 我創建了一個簡單的示例,說明了我正在嘗試但無法做到的事情:
在一個空的Django項目中,我創建了應用程序app1和app2(它們在設置中按此順序排列)。 它們如下所示:
app1.models.py:
from django.db import models
from app2.models import BlogPost
class BlogPostExtend(models.Model):
custom_field_name = models.CharField(max_length=200)
class Meta:
abstract = True
BlogPost.__bases__ = (BlogPostExtend,)+BlogPost.__bases__ # this prevents MRO error
app2.models.py:
from django.db import models
class BlogPost(models.Model):
field_name = models.CharField(max_length=100)
不幸的是,這不會導致在我同步數據庫時在數據庫中創建custom_field_name,盡管在命令行中如果我鍵入BlogPost.custom_field_name,它的確會將其識別為CharField。 我知道在這種簡單情況下,我可以讓BlogPost從BlogPostExtend繼承,但是在實際使用情況下,我無法編輯BlogPost。
這是一個非常簡化的示例,但它說明了我正在嘗試做的事情。
謝謝!
Mixins可以很好地添加屬性和方法,但不能添加字段。
在app1.models.py
,改為執行以下操作:
from django.db import models
from app2.models import BlogPost
custom_field_name = models.CharField(max_length=200)
custom_field_name.contribute_to_class(BlogPost, "custom_field_name")
我認為app1
應用也應該在INSTALLED_APPS
app2
之后。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.