在Django Mezzanine博客文章中添加自定义字段

时间:2015-09-08 11:08:50

标签: django python-3.x mezzanine

从香草夹层应用程序开始,我似乎无法为博客文章模型添加标题。

参考网址说明: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

返回未检测到任何更改

所以,我决定尝试在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应用程序中修改/扩展第三方库中的模型?此外,在上述成功之后,下面的代码应该去哪里?它目前位于我的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)

非常感谢帮助!

1 个答案:

答案 0 :(得分:2)

如果有人遇到类似问题,

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 会按预期生成它。