向 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 从那里按预期生成它。