mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	[1.7.x] Further consolidated the model_inheritance tests.
Backport of 3f01e82 from master
			
			
This commit is contained in:
		| @@ -73,9 +73,14 @@ class ParkingLot4B(Place, ParkingLot4): | |||||||
|     pass |     pass | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @python_2_unicode_compatible | ||||||
| class Supplier(models.Model): | class Supplier(models.Model): | ||||||
|  |     name = models.CharField(max_length=50) | ||||||
|     restaurant = models.ForeignKey(Restaurant) |     restaurant = models.ForeignKey(Restaurant) | ||||||
|  |  | ||||||
|  |     def __str__(self): | ||||||
|  |         return self.name | ||||||
|  |  | ||||||
|  |  | ||||||
| class Wholesaler(Supplier): | class Wholesaler(Supplier): | ||||||
|     retailer = models.ForeignKey(Supplier, related_name='wholesale_supplier') |     retailer = models.ForeignKey(Supplier, related_name='wholesale_supplier') | ||||||
|   | |||||||
| @@ -466,3 +466,25 @@ class ModelInheritanceTest(TestCase): | |||||||
|                                   serves_pizza=True, serves_hot_dogs=True) |                                   serves_pizza=True, serves_hot_dogs=True) | ||||||
|         p = Place.objects.all().select_related('restaurant')[0] |         p = Place.objects.all().select_related('restaurant')[0] | ||||||
|         self.assertIsInstance(p.restaurant.serves_pizza, bool) |         self.assertIsInstance(p.restaurant.serves_pizza, bool) | ||||||
|  |  | ||||||
|  |     def test_inheritance_select_related(self): | ||||||
|  |         # Regression test for #7246 | ||||||
|  |         r1 = Restaurant.objects.create( | ||||||
|  |             name="Nobu", serves_hot_dogs=True, serves_pizza=False | ||||||
|  |         ) | ||||||
|  |         r2 = Restaurant.objects.create( | ||||||
|  |             name="Craft", serves_hot_dogs=False, serves_pizza=True | ||||||
|  |         ) | ||||||
|  |         Supplier.objects.create(name="John", restaurant=r1) | ||||||
|  |         Supplier.objects.create(name="Jane", restaurant=r2) | ||||||
|  |  | ||||||
|  |         self.assertQuerysetEqual( | ||||||
|  |             Supplier.objects.order_by("name").select_related(), [ | ||||||
|  |                 "Jane", | ||||||
|  |                 "John", | ||||||
|  |             ], | ||||||
|  |             attrgetter("name") | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         jane = Supplier.objects.order_by("name").select_related("restaurant")[0] | ||||||
|  |         self.assertEqual(jane.restaurant.name, "Craft") | ||||||
|   | |||||||
| @@ -1,37 +0,0 @@ | |||||||
| """ |  | ||||||
| Regression tests for the interaction between model inheritance and |  | ||||||
| select_related(). |  | ||||||
| """ |  | ||||||
| from __future__ import unicode_literals |  | ||||||
|  |  | ||||||
| from django.db import models |  | ||||||
| from django.utils.encoding import python_2_unicode_compatible |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @python_2_unicode_compatible |  | ||||||
| class Place(models.Model): |  | ||||||
|     name = models.CharField(max_length=50) |  | ||||||
|  |  | ||||||
|     class Meta: |  | ||||||
|         ordering = ('name',) |  | ||||||
|  |  | ||||||
|     def __str__(self): |  | ||||||
|         return "%s the place" % self.name |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @python_2_unicode_compatible |  | ||||||
| class Restaurant(Place): |  | ||||||
|     serves_sushi = models.BooleanField(default=False) |  | ||||||
|     serves_steak = models.BooleanField(default=False) |  | ||||||
|  |  | ||||||
|     def __str__(self): |  | ||||||
|         return "%s the restaurant" % self.name |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @python_2_unicode_compatible |  | ||||||
| class Person(models.Model): |  | ||||||
|     name = models.CharField(max_length=50) |  | ||||||
|     favorite_restaurant = models.ForeignKey(Restaurant) |  | ||||||
|  |  | ||||||
|     def __str__(self): |  | ||||||
|         return self.name |  | ||||||
| @@ -1,31 +0,0 @@ | |||||||
| from __future__ import unicode_literals |  | ||||||
|  |  | ||||||
| from operator import attrgetter |  | ||||||
|  |  | ||||||
| from django.test import TestCase |  | ||||||
|  |  | ||||||
| from .models import Restaurant, Person |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class ModelInheritanceSelectRelatedTests(TestCase): |  | ||||||
|     def test_inherited_select_related(self): |  | ||||||
|         # Regression test for #7246 |  | ||||||
|         r1 = Restaurant.objects.create( |  | ||||||
|             name="Nobu", serves_sushi=True, serves_steak=False |  | ||||||
|         ) |  | ||||||
|         r2 = Restaurant.objects.create( |  | ||||||
|             name="Craft", serves_sushi=False, serves_steak=True |  | ||||||
|         ) |  | ||||||
|         Person.objects.create(name="John", favorite_restaurant=r1) |  | ||||||
|         Person.objects.create(name="Jane", favorite_restaurant=r2) |  | ||||||
|  |  | ||||||
|         self.assertQuerysetEqual( |  | ||||||
|             Person.objects.order_by("name").select_related(), [ |  | ||||||
|                 "Jane", |  | ||||||
|                 "John", |  | ||||||
|             ], |  | ||||||
|             attrgetter("name") |  | ||||||
|         ) |  | ||||||
|  |  | ||||||
|         jane = Person.objects.order_by("name").select_related("favorite_restaurant")[0] |  | ||||||
|         self.assertEqual(jane.favorite_restaurant.name, "Craft") |  | ||||||
		Reference in New Issue
	
	Block a user