自定义 django 管理视图
Posted
技术标签:
【中文标题】自定义 django 管理视图【英文标题】:custom django aministration view 【发布时间】:2014-06-23 13:38:27 【问题描述】:我正在使用 django 管理视图。我有一个文章模型。每篇文章都有标题、正文、日期时间、标签和评级。默认情况下,django 会创建一个用于创建新文章的表单。 我只想要标题和正文的字段,但 django 为所有内容创建字段。我不想隐藏蛞蝓领域。如何隐藏或自定义管理员新文章视图?
这是我的model.py
from django.db import models
from django.core.urlresolvers import reverse
class Article(models.Model):
title = models.CharField(max_length=200)
slug = models.SlugField(unique = True, max_length = 255)
body = models.TextField()
created = models.DateTimeField(auto_now_add = True)
rating = 0
class Meta:
ordering = ['-created']
exclude = ('rating')
def __unicode__(self):
return self.title
def get_absolute_url(self):
return reverse('article.views.article', args=[self.slug])
5 月 7 日更新: 我试图在我的 admin.py 中指定字段,为了让它工作,我必须为我的 slug 删除 prepopulated_fields。这导致一个没有蛞蝓的帖子。难道没有办法让一个没有字段的蛞蝓获得标题吗?
这是我原来的 admin.py。
from django.contrib import admin
from article.models import Article
# Register your models here.
class ArticleAdmin(admin.ModelAdmin):
# fields display on change list
list_display = ['title', 'body']
# fields to filter the change list with
list_filter = ['created',]
# fields to search in change list
search_fields = ['title', 'body']
# enable the date drill down on change list
date_hierarchy = 'created'
# prepopulate the slug from the title - big timesaver!
prepopulated_fields = "slug": ("title",)
admin.site.register(Article, ArticleAdmin)
【问题讨论】:
对于您的更新,您可以覆盖Article
的保存方法以根据标题填充 slug,请查看:using slugify in save。
您真的应该将 Slug 问题移至新线程。
【参考方案1】:
您可以在ModelAdmin.fields 中列出您想要的字段,或者在ModelAdmin.exclude 中排除您不需要的字段。
例如,在一个名为 admin.py 的文件中:
from django.contrib import admin
from myproject.myapp.models import Article
class ArticleAdmin(admin.ModelAdmin):
fields = ('title', 'body')
admin.site.register(Article, ArticleAdmin)
【讨论】:
【参考方案2】:参考ModelAdmin
docs,要从管理员视图中排除字段,在您的ArticleAdmin
类中,您可以像这样指定fields
或exclude
变量:
from django.contrib import admin
class ArticleAdmin(admin.ModelAdmin):
fields = ('title', 'body')
# or equivalently, using exclude:
class ArticleAdmin(admin.ModelAdmin):
exclude = ('slug', 'created', 'rating')
如果您还没有 ModelAdmin 类,请参阅 customizing the admin forms 上的 Django Tutorial。
【讨论】:
【参考方案3】:在您的 admin.py 中,您应该能够排除您不想要的字段:
class ArticleAdmin(admin.ModelAdmin):
exclude = ('slug',)
admin.site.register(Author, ArticleAdmin)
如果您希望该字段显示但不可编辑,您还可以在模型中将该字段设置为只读:
class Article(models.Model):
title = models.CharField(max_length=200)
slug = models.SlugField(unique = True, max_length = 255)
body = models.TextField()
created = models.DateTimeField(auto_now_add = True, readonly=True)
rating = 0
【讨论】:
以上是关于自定义 django 管理视图的主要内容,如果未能解决你的问题,请参考以下文章
Django 管理员,自定义视图错误:int() 以 10 为底的无效文字