我如何为同一个模型创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了一种做我想做的方式(见下文),但是我仍然希望听到其他的做法。
运行两个命令有什么区别: foo = FooModel() 和 bar = BarModel.objects.create() 第二个是否立即在数据库创buildBarModel ,而对于FooModel ,则必须显式调用save()方法才能添加它?
我刚刚开始在django项目中实现信号侦听器。 虽然我明白他们是什么以及如何使用他们。 我很难搞清楚我应该把它们放在哪里。 django网站的文档有这样的说法: 这个代码应该在哪里居住? 你可以把信号处理和注册码放在任何你喜欢的地方。 但是,您需要确保它所在的模块得到早期导入,以便在需要发送任何信号之前,信号处理得到注册。 这使得您的应用程序的models.py是注册信号处理程序的好地方。 虽然这是一个很好的build议,但在我的models.py中使用非模型类或方法只是歪曲了我。 那么,存储和注册信号处理程序的最佳实践/规则是什么?
我想在同一个Django模板中使用相同的{%block%}两次。 我希望这个块在我的基本模板中出现多次: # base.html <html> <head> <title>{% block title %}My Cool Website{% endblock %}</title> </head> <body> <h1>{% block title %}My Cool Website{% endblock %}</h1> </body> </html> 然后扩展它: # blog.html {% extends 'base.html' %} {% block title %}My Blog{% endblock %} # pictures.html {% extends 'base.html' %} {% block title %}My Pictures{% endblock %} # cats.html […]
我正在尝试为表单中的某些字段使用get_or_create,但是当我尝试这样做时,出现了500错误。 其中一行是这样的: customer.source = Source.objects.get_or_create(name="Website") 我得到上面的代码错误是: Cannot assign "(<Source: Website>, False)": "Customer.source" must be a "Source" instance.
我的views.py已经变得太大了,很难find正确的观点。 如何将它分成几个文件然后导入? 它是否涉及速度损失? 我可以用models.py做同样的事吗?
我保留了我的版本控制系统中的重要设置,例如开发和生产服务器的主机名和端口。 但是我知道在VCS存储库中保存秘密 (如私钥和数据库密码)是不好的做法 。 但是,像其他任何设置一样,密码看起来应该是版本化的。 那么保持密码版本控制的正确方法是什么? 我想这将涉及保持秘密在他们自己的“秘密设置”文件,并有该文件encryption和版本控制。 但是什么技术? 而如何正确地做到这一点? 有没有更好的办法去完成呢? 我通常会问这个问题,但在我的具体情况下,我想使用git和github存储Django / Python站点的密钥和密码。 而且,当我用git推/拉时,一个理想的解决scheme会做一些神奇的事 – 例如,如果encryption的密码文件改变了,那么运行一个要求input密码并将其解密的脚本。 编辑:为了清楚起见,我问的是在哪里存储生产的秘密。
我想要做以下事情: raise HttpResponseForbidden() 但我得到的错误: exceptions must be old-style classes or derived from BaseException, not HttpResponseForbidden 我应该怎么做?
我是Django REST框架的初学者,需要你的build议。 我正在开发一个Web服务。 该服务必须提供REST接口到其他服务。 REST接口,我需要实现,不直接与我的模型(我的意思是得到,放,发布,删除操作)。 相反,它提供了一些计算结果的其他服务。 在请求我的服务进行一些计算,只是返回结果(不会将结果存储在自己的数据库中)。 以下是我对如何实现REST接口的理解。 纠正我,如果我错了。 创build进行计算的类。 将其命名为“CalcClass”。 CalcClass在其工作中使用模型。 计算所需的parameter passing给构造函数。 执行计算操作。 它将结果作为“ResultClass”返回。 创buildResultClass。 从对象派生。 它只是具有包含计算结果的属性。 计算结果的一部分被表示为元组的元组。 据我所知,进一步的序列化将更好地为这些结果实现一个单独的类,并将这些对象的列表添加到ResultClass。 为ResultClass创build序列化程序。 从serializers.Serializer派生。 计算结果是只读的,因此主要使用Field类的字段,而不是专门的类,如IntegerField。 我不应该在ResultClass和Serializer上impl save()方法,因为我不打算存储结果(我只是想根据请求返回它们)。 用于嵌套结果的Impl序列化器(记得上面提到的元组的元组)。 创build视图来返回计算结果。 从APIView派生。 只需要得到()。 在get()中创buildCalcClass,并从请求中获取参数,调用它的calc(),得到ResultClass,创buildSerializer并将ResultClass传递给它,返回Response(serializer.data)。 url 在我的情况下没有api根。 我应该只有url来获得各种计算结果(与差异参数计算)。 添加调用format_suffix_patterns为api浏览。 我错过了什么? 这个方法一般是正确的吗?
在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的最新版本)。