我试图找出测试的最佳方式admin.ModelAdmin在admin.py.具体来说,我重写了save_model()我想测试的功能.根据我所做的研究,我发现的唯一解决方案是编写请求/响应测试,然后查询数据库.
我设法TextArea用两种不同的方式覆盖django管理界面中Widget 的外观:
在admin.py:
class RulesAdmin(admin.ModelAdmin):
formfield_overrides = {
models.TextField: {'widget': Textarea(
attrs={'rows': 1,
'cols': 40})},
}
...
admin.site.register(Rules, RulesAdmin)
Run Code Online (Sandbox Code Playgroud)
这种方式有点过分,因为它会改变该模型的所有TextField.
在forms.py:
from django.forms import ModelForm, Textarea
from TimePortal.models import Rules
class RulesModelForm(ModelForm):
class Meta:
model = Rules
widgets = {
'parameters': Textarea(attrs={'cols': 30, 'rows': 1}),
}
Run Code Online (Sandbox Code Playgroud)
在 admin.py
from AppName.forms import RulesModelForm
class RulesAdmin(admin.ModelAdmin):
form = RulesModelForm
Run Code Online (Sandbox Code Playgroud)
这两种解决方案调整TextArea.但是,在两种解决方案中,文本区域的实际大小超过1行(实际上是2行).以下是呈现的HTML的外观:
<div class="form-row field-parameters">
<div>
<label for="id_parameters" class="required">Parameters:</label>
<textarea id="id_parameters" rows="1" cols="30" name="parameters">{}</textarea> …Run Code Online (Sandbox Code Playgroud) 我最近开始使用django管理一个使用twisted.web多年来有机增长的大型现有应用程序.我开始尝试使用django,它是自动管理界面,我对结果非常满意.
对我来说似乎缺少的一件事是能够为用户提供对数据的只读访问权限.例如,我们有一个角色,允许人们登录并创建采购订单.他们还需要能够查看,但不能编辑其他客户端或产品数据.
如何在django admin中创建"查看"权限,以便用户可以修改某些表的数据,同时只读取其他表的访问权限?
更新:Django Admin似乎给了我CRUD界面的CUD.如何获取具有关联权限和组的只读部分?
更新2010年2月12日:Django 1.2现在将包含只读.详情如下.
我猜我回答了自己的问题.将内容下移到下面的真实答案.
我编写了自定义管理操作,基本上QuerySet.update()对模型中的某些字段执行操作.有些时候不应该允许这些操作完成 - 相反,它们应该显示错误而不做任何事情.我试过了message_user,但是它显示了一个绿色的复选标记,而我希望它显示Django管理员错误信息.
我在网上找到的解决方案是使用a ModelForm,但我不认为这适用于这种情况,因为这里的一切都发生在管理员更改列表页面上.
是否可以为django管理员创建一个自定义管理操作,不需要选择一些对象来运行它?
如果您尝试在不选择对象的情况下运行操作,则会收到以下消息:
Items must be selected in order to perform actions on them. No items have been changed.
Run Code Online (Sandbox Code Playgroud)
有没有办法覆盖此行为并让操作仍然运行?
我有一个名为app的应用程序doors,我models.py的应用程序有10个表/类.在我的下admin.py,如何在文件中注册每个模型models.py?
例如,目前我必须对其进行硬编码:
from django.contrib import admin
from doors.models import *
admin.site.register(Group)
admin.site.register(Item)
admin.site.register(ItemType)
admin.site.register(Location)
admin.site.register(Log)
admin.site.register(Order)
admin.site.register(Property)
admin.site.register(User)
admin.site.register(Vendor)
Run Code Online (Sandbox Code Playgroud)
有没有办法我可能会找到每个类models.py并循环并注册每个类?或者是否有一些我可以用于Django的通配符?
如何检入模板用户是否属于某个组?
有可能在view生成template但是如果我想检查这base.html是一个扩展模板(它没有它自己的视图功能)怎么办?
我的所有模板都扩展了,base.html所以在每个模板中检查它都不好view.
在base.html包含上部杆,它应包含在其中的按钮根据group登录用户是(客户,销售商).
在我的base.html是:
{% if user.is_authenticated %}
Run Code Online (Sandbox Code Playgroud)
这是不够的,因为我必须采取不同的方式对用户Customers和用户采取不同的行动Sellers.
所以我想要的是:
{% if user.in_group('Customers') %}
<p>Customer</p>
{% endif %}
{% if user.in_group('Sellers') %}
<p>Seller</p>
{% endif %}
Run Code Online (Sandbox Code Playgroud) 我试图覆盖Django管理对象上的save_model方法,以防止用户更改某个字段.但是我无法找到方法来确定该方法中的字段是否已更改.
到目前为止,这是我的代码:
def save_model(self, request, obj, form, change):
if change:
if obj.parking_location == form.cleaned_data['parking_location']:
super(MyVehiclesAdmin, self).save_model(request, obj, form, change)
else:
messages.error(request,
"The Parking Location field cannot be changed.")
Run Code Online (Sandbox Code Playgroud)
问题是obj.parking_location,而form.cleaned_data ['parking_location']都有新值.(这可能是Django中的一个错误吗?看起来obj应该包含预保存值).无论如何,还有另一种方法可以实现这一目标吗?
(我在Django 1.2上)
我正在使用标准的django管理模块来显示行列表.其中一列是数字字段.我想显示一个额外的'总计'行,其中大部分列都是空白的,除了数字列,它应该是所有对象的总和.
在管理模块中是否有一种简单的方法可以做到这一点,或者我最好为它制作自定义视图?
我正在使用Django 1.2.
假设我在Django 1.4中有一个简单的博客应用程序:
class Post(models.Model):
title = …
published_on = …
tags = models.ManyToManyField('Tag')
class Tag(models.Model):
name = …
Run Code Online (Sandbox Code Playgroud)
即帖子有很多标签.在Django管理,我得到一个不错的<select multi>,如果我包括tags在fields了PostAdmin.有没有一种简单的方法可以包含帖子列表(简单<select multi>)TagAdmin?我试图把fields = ['name', 'posts']在TagAdmin,就有了一个ImproperlyConfigured错误.(结果相同post_set).
我对Django很好,所以可以提供一个合适的AdminForm和Admin对象,但我希望有一个Right Way™来做.