mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Fixed #342 -- added readonly_fields to ModelAdmin. Thanks Alex Gaynor for bootstrapping the patch.
ModelAdmin has been given a readonly_fields that allow field and calculated values to be displayed alongside editable fields. This works on model add/change pages and inlines. git-svn-id: http://code.djangoproject.com/svn/django/trunk@11965 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
@@ -10,20 +10,18 @@ from django.contrib.admin.models import LogEntry, DELETION
|
||||
from django.contrib.admin.sites import LOGIN_FORM_KEY
|
||||
from django.contrib.admin.util import quote
|
||||
from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME
|
||||
from django.utils import formats
|
||||
from django.utils.cache import get_max_age
|
||||
from django.utils.html import escape
|
||||
from django.utils.translation import get_date_formats
|
||||
|
||||
# local test models
|
||||
from models import Article, BarAccount, CustomArticle, EmptyModel, \
|
||||
ExternalSubscriber, FooAccount, Gallery, ModelWithStringPrimaryKey, \
|
||||
Person, Persona, Picture, Podcast, Section, Subscriber, Vodcast, \
|
||||
Language, Collector, Widget, Grommet, DooHickey, FancyDoodad, Whatsit, \
|
||||
Category
|
||||
Category, Post
|
||||
|
||||
try:
|
||||
set
|
||||
except NameError:
|
||||
from sets import Set as set
|
||||
|
||||
class AdminViewBasicTest(TestCase):
|
||||
fixtures = ['admin-views-users.xml', 'admin-views-colors.xml', 'admin-views-fabrics.xml']
|
||||
@@ -1688,3 +1686,54 @@ class NeverCacheTests(TestCase):
|
||||
"Check the never-cache status of the Javascript i18n view"
|
||||
response = self.client.get('/test_admin/jsi18n/')
|
||||
self.failUnlessEqual(get_max_age(response), None)
|
||||
|
||||
|
||||
class ReadonlyTest(TestCase):
|
||||
fixtures = ['admin-views-users.xml']
|
||||
|
||||
def setUp(self):
|
||||
self.client.login(username='super', password='secret')
|
||||
|
||||
def tearDown(self):
|
||||
self.client.logout()
|
||||
|
||||
def test_readonly_get(self):
|
||||
response = self.client.get('/test_admin/admin/admin_views/post/add/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertNotContains(response, 'name="posted"')
|
||||
# 3 fields + 2 submit buttons + 2 inline management form fields, + 2
|
||||
# hidden fields for inlines + 1 field for the inline
|
||||
self.assertEqual(response.content.count("input"), 10)
|
||||
self.assertContains(response, formats.localize(datetime.date.today()))
|
||||
self.assertContains(response,
|
||||
"<label>Awesomeness level:</label>")
|
||||
self.assertContains(response, "Very awesome.")
|
||||
self.assertContains(response, "Unkown coolness.")
|
||||
self.assertContains(response, "foo")
|
||||
self.assertContains(response,
|
||||
formats.localize(datetime.date.today() - datetime.timedelta(days=7))
|
||||
)
|
||||
|
||||
p = Post.objects.create(title="I worked on readonly_fields", content="Its good stuff")
|
||||
response = self.client.get('/test_admin/admin/admin_views/post/%d/' % p.pk)
|
||||
self.assertContains(response, "%d amount of cool" % p.pk)
|
||||
|
||||
def test_readonly_post(self):
|
||||
data = {
|
||||
"title": "Django Got Readonly Fields",
|
||||
"content": "This is an incredible development.",
|
||||
"link_set-TOTAL_FORMS": "1",
|
||||
"link_set-INITIAL_FORMS": "0",
|
||||
}
|
||||
response = self.client.post('/test_admin/admin/admin_views/post/add/', data)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertEqual(Post.objects.count(), 1)
|
||||
p = Post.objects.get()
|
||||
self.assertEqual(p.posted, datetime.date.today())
|
||||
|
||||
data["posted"] = "10-8-1990" # some date that's not today
|
||||
response = self.client.post('/test_admin/admin/admin_views/post/add/', data)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertEqual(Post.objects.count(), 2)
|
||||
p = Post.objects.order_by('-id')[0]
|
||||
self.assertEqual(p.posted, datetime.date.today())
|
||||
|
||||
Reference in New Issue
Block a user