1

我是 django 的新手。

我正在尝试根据一本关于​​ django 的书运行示例。

我已经在我的模型类中添加了“class Admin”,但是,在 django 管理界面中,我只能看到“用户”、“组”和“站点”,我的模型类都没有出现。

没有错误或警告信息,所以我不知道发生了什么以及下一步该怎么做。

有什么帮助吗?

from django.db import models

# Create your models here.
class Publisher(models.Model):
    name = models.CharField(max_length=30)
    address=models.CharField(max_length=50)
    city=models.CharField(max_length=60)
    state_province=models.CharField(max_length=30)
    country=models.CharField(max_length=50)
    website=models.URLField()

    def __str__(self):
        return self.name

    class Admin:
        pass

class Author(models.Model):
    salutation=models.CharField(max_length=10)
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email=models.EmailField()
    headshot=models.ImageField(upload_to='/tmp')

    def __str__(self):
        return '%s %s' % (self.first_name, self.last_name)

    class Admin:
        pass

class Book(models.Model):
    title=models.CharField(max_length=10)
    authors=models.ManyToManyField(Author)
    publisher=models.ForeignKey(Publisher)
    publication_date = models.DateField()

    def __str__(self):
        return self.title
4

5 回答 5

3

您需要做三件事才能通过管理站点编辑模型:

  1. 使用代码在您的应用目录中创建文件“admin.py”(查看https://docs.djangoproject.com/en/dev/ref/contrib/admin/#modeladmin-objects):

    from django.contrib import admin
    from your_app.models import Publisher, Author, Book
    
    admin.site.register(Author)
    admin.site.register(Publisher)
    admin.site.register(Book)
    
  2. 在您的 urls.py 添加以下内容(查看https://docs.djangoproject.com/en/dev/ref/contrib/admin/#hooking-adminsite-instances-into-your-urlconf):

    from django.conf.urls import patterns, url, include
    from django.contrib import admin
    
    admin.autodiscover()
    
    urlpatterns = patterns('',
        (r'^admin/', include(admin.site.urls)),
        # your urls goes here
    )
    
  3. 请确保您的 settings.py 满足以下要求(查看https://docs.djangoproject.com/en/dev/ref/contrib/admin/#overview):

    TEMPLATE_CONTEXT_PROCESSORS = (
        'django.contrib.messages.context_processors.messages',
        #other context processors
    )
    
    MIDDLEWARE_CLASSES = (
        'django.contrib.messages.middleware.MessageMiddleware',
        # other middleware
    )
    
    INSTALLED_APPS = (
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.messages',
        'django.contrib.sessions',
        # other apps
    )
    
于 2012-05-24T05:23:16.400 回答
2

您应该创建 admin.py 并遵循以下代码

from xxxxx.models import Publisher
from django.contrib import admin

admin.site.register(Publisher)
admin.site.register(Author)
admin.site.register(Book)
于 2012-05-24T04:52:51.080 回答
1

你在那里所做的并不是它实际上是如何完成的。正确的方法是models.pyadmin.py.

models.py

from django.db import models

# Create your models here.
class Publisher(models.Model):
    name = models.CharField(max_length=30)
    address=models.CharField(max_length=50)
    city=models.CharField(max_length=60)
    state_province=models.CharField(max_length=30)
    country=models.CharField(max_length=50)
    website=models.URLField()

    def __str__(self):
        return self.name


class Author(models.Model):
    salutation=models.CharField(max_length=10)
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email=models.EmailField()
    headshot=models.ImageField(upload_to='/tmp')

    def __str__(self):
        return '%s %s' % (self.first_name, self.last_name)


class Book(models.Model):
    title=models.CharField(max_length=10)
    authors=models.ManyToManyField(Author)
    publisher=models.ForeignKey(Publisher)
    publication_date = models.DateField()

    def __str__(self):
        return self.title

admin.py

from django.contrib import admin
from myproject.myapp.models import Author, Publisher


class AuthorAdmin(admin.ModelAdmin):
    pass


class PublisherAdmin(admin.ModelAdmin):
    pass


admin.site.register(Author, AuthorAdmin)
admin.site.register(Publisher, PublisherAdmin)

另外,如果你的管理类是空的pass,你可以一起省略它们,所以你最终会是这样的:

admin.py

from django.contrib import admin
from myproject.myapp.models import Author, Publisher


admin.site.register(Author)
admin.site.register(Publisher)
于 2012-05-24T04:54:36.507 回答
1

您错过了在管理站点注册模型的部分。

于 2012-05-24T04:49:31.870 回答
0

您正在使用旧方法来声明应该出现在管理界面中的模型。这种方法现在已经过时了。请参考手册并明确您使用的 django 版本。以及如何得到你想要的。

于 2012-05-24T04:55:32.717 回答