向 Django Mezzanine 博客添加自定义字段 post
Adding a custom field to Django Mezzanine blog post
从香草夹层应用程序开始,我似乎无法为博客 post 模型添加标题。
参考URL说明:http://mezzanine.jupo.org/docs/model-customization.html
在settings.py中:
EXTRA_MODEL_FIELDS = (
(
"mezzanine.pages.models.BlogPost.caption",
"CharField",
("Caption",),
{"blank": True, 'max_length': 150},
),
)
从这点来说,运行 python ./manage.py makemigrations
returns 未检测到任何变化
所以,我决定尝试在 Django 中创建一个名为 UpdateBlogPost 的应用程序
from django.db import models
from mezzanine.blog.models import BlogPost
class BlogPost(BlogPost):
caption = models.CharField("Caption", max_length=200)
tags = models.CharField("Tags", max_length=100)
featured_position = models.IntegerField("Featured Position", default=0, null=True)
运行 上面的 makemigrations 会产生迁移,但也许有经验的 Django 开发人员已经意识到它会产生 OneToOneField 迁移以将 UpdateBlogPost.BlogPost 与 Mezzanine 模型相关联。
一个更广泛、更有用的问题是:我如何从我自己的一个 Django 应用程序中 modify/extend 来自第 3 方库的模型?另外,在上面的代码成功之后,下面的代码应该去哪里?它目前位于我的 UpdateBlogPost 应用程序的 admin.py.
from copy import deepcopy
from django.contrib import admin
from mezzanine.blog.admin import BlogPostAdmin
from mezzanine.blog.models import BlogPost
blog_fieldsets = deepcopy(BlogPostAdmin.fieldsets)
blog_fieldsets[0][1]["fields"].insert(1, "caption")
class MyBlogPostAdmin(BlogPostAdmin):
fieldsets = blog_fieldsets
admin.site.unregister(BlogPost)
admin.site.register(BlogPost, MyBlogPostAdmin)
不胜感激!
如果有人遇到类似问题,
EXTRA_MODEL_FIELDS = (
(
"mezzanine.pages.models.BlogPost.caption",
"CharField",
("Caption",),
{"blank": True, 'max_length': 150},
),
)
是错误的,应该是
EXTRA_MODEL_FIELDS = (
(
"mezzanine.blog.models.BlogPost.caption",
"django.db.models.CharField",
("Caption",),
{"default": 'Some String', 'max_length': 150},
),
)
运行 makemigrations 从那里按预期生成它。
从香草夹层应用程序开始,我似乎无法为博客 post 模型添加标题。
参考URL说明:http://mezzanine.jupo.org/docs/model-customization.html
在settings.py中:
EXTRA_MODEL_FIELDS = (
(
"mezzanine.pages.models.BlogPost.caption",
"CharField",
("Caption",),
{"blank": True, 'max_length': 150},
),
)
从这点来说,运行 python ./manage.py makemigrations
returns 未检测到任何变化
所以,我决定尝试在 Django 中创建一个名为 UpdateBlogPost 的应用程序
from django.db import models
from mezzanine.blog.models import BlogPost
class BlogPost(BlogPost):
caption = models.CharField("Caption", max_length=200)
tags = models.CharField("Tags", max_length=100)
featured_position = models.IntegerField("Featured Position", default=0, null=True)
运行 上面的 makemigrations 会产生迁移,但也许有经验的 Django 开发人员已经意识到它会产生 OneToOneField 迁移以将 UpdateBlogPost.BlogPost 与 Mezzanine 模型相关联。
一个更广泛、更有用的问题是:我如何从我自己的一个 Django 应用程序中 modify/extend 来自第 3 方库的模型?另外,在上面的代码成功之后,下面的代码应该去哪里?它目前位于我的 UpdateBlogPost 应用程序的 admin.py.
from copy import deepcopy
from django.contrib import admin
from mezzanine.blog.admin import BlogPostAdmin
from mezzanine.blog.models import BlogPost
blog_fieldsets = deepcopy(BlogPostAdmin.fieldsets)
blog_fieldsets[0][1]["fields"].insert(1, "caption")
class MyBlogPostAdmin(BlogPostAdmin):
fieldsets = blog_fieldsets
admin.site.unregister(BlogPost)
admin.site.register(BlogPost, MyBlogPostAdmin)
不胜感激!
如果有人遇到类似问题,
EXTRA_MODEL_FIELDS = (
(
"mezzanine.pages.models.BlogPost.caption",
"CharField",
("Caption",),
{"blank": True, 'max_length': 150},
),
)
是错误的,应该是
EXTRA_MODEL_FIELDS = (
(
"mezzanine.blog.models.BlogPost.caption",
"django.db.models.CharField",
("Caption",),
{"default": 'Some String', 'max_length': 150},
),
)
运行 makemigrations 从那里按预期生成它。