【问题标题】:custom django aministration view自定义 django 管理视图
【发布时间】: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 问题移至新线程。

标签: python django django-admin


【解决方案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 类中,您可以像这样指定fieldsexclude 变量:

    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
      

      【讨论】:

        猜你喜欢
        • 2020-03-04
        • 2011-03-09
        • 2011-08-07
        • 1970-01-01
        • 1970-01-01
        • 2020-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多