簡體   English   中英

將Mixin字段轉換為現有且不可編輯的Django模型

[英]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之后。

這是關於contribute_to_class的解釋

暫無
暫無

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

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