【问题标题】:How to add a Model (not an app) to django?如何将模型(不是应用程序)添加到 django?
【发布时间】:2012-02-20 20:58:44
【问题描述】:

我正在使用 django 1.3,只是想向管理站点添加一个简单的模型(不是应用程序)。 所以我试过了:

from django.db import models

class UserProfile(models.Model):
    notes = models.TextField(db_name="Notes", max_length=15)

    def _str_(self):
        return self.notes

    class Admin:
        pass

并且还尝试在站点根目录和 /static/admin/ 目录中创建 admin.py 文件,并尝试了两个标准条目,如下所示:

from django.contrib import admin
from mock.models import UserProfile                                       

admin.site.register(UserProfile)

from django.contrib import admin
from mock.models import UserProfile

class UserProfileAdmin(admin.ModelAdmin):                                               
    pass                                                                                

admin.site.register(UserProfile, UserProfileAdmin)

任何帮助将不胜感激。非常感谢。

【问题讨论】:

  • 为什么不只是有一个应用程序?如果是您的个人资料,请查看pypi.python.org/pypi/django-profiles
  • 一些离题建议:在 Django 中,您必须重载 __unicode__ 方法,而不是 __str__ 方法。我也强烈建议你阅读完整的Django starting tutorial(第 2 部分是关于 Django Admin
  • @mongoose_za 感谢您提供个人资料 pkg 信息。
  • @julio.alegria 我确实阅读了第 2 部分,但确实忘记了那部分;虽然我确实安装了没有运行的应用程序,但我知道我创建的越多,以后可能会需要它。谢谢

标签: python django model admin


【解决方案1】:

不要像下面这样在模型本身中定义您的 Admin 类。这是 Django 1.0 之前的真正老方法。我不确定您使用的是什么教程或文档,但它已经过时了。

class UserProfile(models.Model):
    notes = models.TextField(db_name="Notes", max_length=15)
    # don't do this!
    class Admin:
        pass

定义UserProfileAdmin 是正确的方法。 admin.py 文件不应进入/static/admin/。 static 目录用于存放 CSS 样式表和 javascript 文件等静态文件,而不用于存放 Django 代码。

至于您是否可以在不定义应用程序的情况下定义模型的问题,这不是一个好主意。 django 的很多部分都假设每个模型都属于一个应用程序。例如数据库表名是appname_modelname

创建应用不会花费太长时间。运行 startapp 命令,它将创建基本目录和文件。

./manage.py startapp <appname>

然后您需要做的就是将新应用添加到INSTALLED_APPS,并创建您的admin.py 文件。

随着您的项目变得越来越大,将模型保留在应用程序中会使其更有条理。许多 Django 用户为奇数模型创建了一个名为 utils(或类似名称)的应用程序。

【讨论】:

  • 多年未见class Admin
  • @Yuji Tomita,啊,是的,我在 django 刚推出时确实尝试过,确实记得看到过这种语法,所以它对我来说确实是正确的......但是 Alasdair 是正确的,我应该混合它们在实际模型中。
  • @ChrisHarty,你的意思是你不应该。并不是说它会做任何事情:)
  • @YujiTomita,是的,意思是说“不应该”。我回复的时候有点晚了:)。是的,我不确定最终的结果,但我不会再因为它沿着这条路而松懈。感谢您的更正:)
  • 哇,看起来我对 Alasdair 的回答的回复和代码已被删除。想知道为什么?? :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-09
  • 1970-01-01
  • 2018-07-27
  • 1970-01-01
  • 1970-01-01
  • 2016-12-19
相关资源
最近更新 更多