我有一个Django站点,有很多模型和表单。 我有很多自定义表单和表单集和内联表单集以及自定义validation和自定义查询集。 因此,添加模型的动作取决于需要其他东西的表单,而djangopipe理中的“添加模型”则通过自定义的查询集中的500来实现。 无论如何,禁用某些模型的“添加$模型”function? 我想要/admin/appname/modelname/add/给一个404(或适当的“走开”错误信息),我不希望“添加$ MODELNAME”button在/admin/appname/modelname视图上。 Djangopipe理员提供了一种禁用pipe理操作的方法(http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-actions),但是该模型的唯一操作是“delete_selected”。 即pipe理员操作只对现有模型起作用。 有没有一些Django式的方式来做到这一点?
我如何为同一个模型创build多个ModelAdmin,每个模型都有不同的定制,并链接到不同的URL? 假设我有一个名为Posts的Django模型。 默认情况下,此模型的pipe理视图将列出所有Post对象。 我知道我可以通过设置像list_display这样的variables或者在我的ModelAdmin中重写queryset方法来以各种方式自定义页面上显示的对象列表,如下所示: class MyPostAdmin(admin.ModelAdmin): list_display = ('title', 'pub_date') def queryset(self, request): request_user = request.user return Post.objects.filter(author=request_user) admin.site.register(MyPostAdmin, Post) 默认情况下,这可以通过URL /admin/myapp/post 。 不过,我想有相同模型的多个视图/ ModelAdmins。 例如/admin/myapp/post会列出所有的post对象,而/admin/myapp/myposts会列出属于用户的所有post,而/admin/myapp/draftpost可能会列出所有尚未发布的post。 (这些只是例子,我的实际使用情况更复杂) 您不能为同一模型注册多个ModelAdmin(这会导致AlreadyRegisteredexception)。 理想情况下,我希望实现这一点, 而不是把所有东西都放到一个ModelAdmin类中,并编写我自己的'urls'函数,根据URL返回不同的查询集。 我看了一下Django的源代码,并且看到了像ModelAdmin.changelist_view这样的函数,它可能会被包含在我的urls.py中,但是我不确定这是如何工作的。 更新 :我已经find了一种做我想做的方式(见下文),但是我仍然希望听到其他的做法。
在Django 1.0之前,有一个简单的方法可以获得一个对象的pipe理url,并且我写了一个小的filter,像这样使用: <a href="{{ object|admin_url }}" …. > … </a> 基本上我使用的URL反向函数的视图名称是'django.contrib.admin.views.main.change_stage' reverse( 'django.contrib.admin.views.main.change_stage', args=[app_label, model_name, object_id] ) 得到的url。 正如你可能已经猜到了,我试图更新到最新版本的Django,这是我遇到的障碍之一,获取pipe理url的方法不再工作。 我怎么能在django 1.0中做到这一点? (或1.1,因为我试图更新到svn的最新版本)。
如何更改Djangopipe理标题中的“Djangopipe理”文本? 它似乎没有涵盖在“定制pipe理”文档。
我有一个与Book有外键关系的Person模型。 书有很多字段,但是我最关心的是“作者”(一个标准的CharField)。 据说,在我的PersonAdmin模型中,我想使用“list_display”显示“book.author”。 我已经尝试了所有明显的方法(见下文),但似乎没有任何工作。 有什么build议么? class PersonAdmin(admin.ModelAdmin): list_display = ['book.author',]
我遇到了ManytoMany Relationships问题,当我保存模型(通过pipe理员)时,在模型中没有更新,尝试在附加到post_save信号的函数内或关联的AdminModel的save_model内使用新值。 我试图重新加载这些函数中的对象,通过使用与ID ..的function,但它仍然有旧值。 这是交易问题吗? 交易结束时是否有信号出现? 谢谢,
有没有告诉Django的一种方式,有一个内容types的GenericForeignKey只能指向预定义列表中的模型? 例如,我有4个模型:A,B,C,D和一个包含GenericForeignKey的模型X. 我可以告诉X,GenericForeignKey只允许A和B吗?
对于Django 1.1。 我在我的models.py中有这个: class User(models.Model): created = models.DateTimeField(auto_now_add=True) modified = models.DateTimeField(auto_now=True) 更新一行时,我得到: [Sun Nov 15 02:18:12 2009] [error] /home/ptarjan/projects/twitter-meme/django/db/backends/mysql/base.py:84: Warning: Column 'created' cannot be null [Sun Nov 15 02:18:12 2009] [error] return self.cursor.execute(query, args) 我的数据库的相关部分是: `created` datetime NOT NULL, `modified` datetime NOT NULL, 这是值得担忧的吗? 侧面的问题:在我的pipe理工具中,这两个字段没有显示出来。 这是预期的吗?
我如何添加一个自定义filter到Django的pipe理员(模型仪表板右侧出现的filter)? 我知道很容易包含一个基于该模型的字段的filter,但是像这样的“计算”字段呢? class NewsItem(models.Model): headline = models.CharField(max_length=4096, blank=False) byline_1 = models.CharField(max_length=4096, blank=True) dateline = models.DateTimeField(help_text=_("date/time that appears on article")) body_copy = models.TextField(blank=False) when_to_publish = models.DateTimeField(verbose_name="When to publish", blank=True, null=True) # HOW CAN I HAVE "is_live" as part of the admin filter? It's a calculated state!! def is_live(self): if self.when_to_publish is not None: if ( self.when_to_publish […]
如何覆盖pipe理模板(例如admin / index.html),同时对其进行扩展(请参阅https://docs.djangoproject.com/en/dev/ref/contrib/admin/#overriding-vs-replacing -an-admin-template )? 首先 – 我知道这个问题之前已经被问到和回答过了(请参阅Django:覆盖和扩展应用程序模板 ),但正如答案所示,如果您使用的是app_directories模板加载器(这是大部分时间)。 我目前的解决方法是复制和扩展,而不是直接从pipe理模板扩展。 这个工程很好,但是当pipe理模板改变的时候,它会让人感到困惑,并增加额外的工作。 它可以为模板想一些自定义的扩展标签,但如果已经存在解决scheme,我不想重新发明轮子。 在旁注:有没有人知道Django本身是否会解决这个问题?