Further consolidated the model_inheritance tests.

This commit is contained in:
Aymeric Augustin 2014-04-21 11:50:53 +02:00
parent 3f76339355
commit 3f01e82c59
5 changed files with 27 additions and 68 deletions

View File

@ -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')

View File

@ -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")

View File

@ -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

View File

@ -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")