mirror of
				https://github.com/django/django.git
				synced 2025-10-31 03:54:51 +00:00 
			
		
		
		
	Fixed #12654 - Correctly display ForeignKey fields in read-only scenarios. Thanks, minmax.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@12366 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
		
							parent
							
								
									6c36e1034a
								
							
						
					
					
						commit
						267346678d
					
				
					 3 changed files with 48 additions and 2 deletions
				
			
		|  | @ -247,7 +247,7 @@ def lookup_field(name, obj, model_admin=None): | |||
|         f = None | ||||
|     else: | ||||
|         attr = None | ||||
|         value = getattr(obj, f.attname) | ||||
|         value = getattr(obj, name) | ||||
|     return f, attr, value | ||||
| 
 | ||||
| def label_for_field(name, model, model_admin=None, return_attr=False): | ||||
|  |  | |||
|  | @ -6,6 +6,7 @@ class Article(models.Model): | |||
|     """ | ||||
|     A simple Article model for testing | ||||
|     """ | ||||
|     site = models.ForeignKey('sites.Site', related_name="admin_articles") | ||||
|     title = models.CharField(max_length=100) | ||||
|     title2 = models.CharField(max_length=100, verbose_name="another name") | ||||
|     created = models.DateTimeField() | ||||
|  |  | |||
|  | @ -1,16 +1,61 @@ | |||
| from datetime import datetime | ||||
| import unittest | ||||
| 
 | ||||
| from django.db import models | ||||
| 
 | ||||
| from django.contrib import admin | ||||
| from django.contrib.admin.util import display_for_field, label_for_field | ||||
| from django.contrib.admin.util import display_for_field, label_for_field, lookup_field | ||||
| from django.contrib.admin.views.main import EMPTY_CHANGELIST_VALUE | ||||
| from django.contrib.sites.models import Site | ||||
| from django.utils.formats import localize | ||||
| 
 | ||||
| from models import Article | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| class UtilTests(unittest.TestCase): | ||||
|     def test_values_from_lookup_field(self): | ||||
|         """ | ||||
|         Regression test for #12654: lookup_field | ||||
|         """ | ||||
|         SITE_NAME = 'example.com' | ||||
|         TITLE_TEXT = 'Some title' | ||||
|         CREATED_DATE = datetime.min | ||||
|         ADMIN_METHOD = 'admin method' | ||||
|         SIMPLE_FUNCTION = 'function' | ||||
|         INSTANCE_ATTRIBUTE = 'attr' | ||||
| 
 | ||||
|         class MockModelAdmin(object): | ||||
|             def get_admin_value(self, obj): | ||||
|                 return ADMIN_METHOD | ||||
| 
 | ||||
|         simple_function = lambda obj: SIMPLE_FUNCTION | ||||
| 
 | ||||
|         article = Article( | ||||
|             site=Site(domain=SITE_NAME), | ||||
|             title=TITLE_TEXT, | ||||
|             created=CREATED_DATE, | ||||
|         ) | ||||
|         article.non_field = INSTANCE_ATTRIBUTE | ||||
| 
 | ||||
|         verifications = ( | ||||
|             ('site', SITE_NAME), | ||||
|             ('created', localize(CREATED_DATE)), | ||||
|             ('title', TITLE_TEXT), | ||||
|             ('get_admin_value', ADMIN_METHOD), | ||||
|             (simple_function, SIMPLE_FUNCTION), | ||||
|             ('test_from_model', article.test_from_model()), | ||||
|             ('non_field', INSTANCE_ATTRIBUTE) | ||||
|         ) | ||||
| 
 | ||||
|         mock_admin = MockModelAdmin() | ||||
|         for name, value in verifications: | ||||
|             field, attr, resolved_value = lookup_field(name, article, mock_admin) | ||||
| 
 | ||||
|             if field is not None: | ||||
|                 resolved_value = display_for_field(resolved_value, field) | ||||
| 
 | ||||
|             self.assertEqual(value, resolved_value) | ||||
| 
 | ||||
|     def test_null_display_for_field(self): | ||||
|         """ | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Jannis Leidel
						Jannis Leidel