[1.6.x] Fixed ._meta.pk_index() virtual field failure

Backport of 92476e880c from master
This commit is contained in:
Anssi Kääriäinen 2013-07-25 16:25:23 +03:00
parent 7604749871
commit d439f85bbf
3 changed files with 23 additions and 3 deletions

View File

@ -204,9 +204,10 @@ class Options(object):
def pk_index(self):
"""
Returns the index of the primary key field in the self.fields list.
Returns the index of the primary key field in the self.concrete_fields
list.
"""
return self.fields.index(self.pk)
return self.concrete_fields.index(self.pk)
def setup_proxy(self, target):
"""

View File

@ -140,6 +140,9 @@ class Article(models.Model):
except ArticleTranslation.DoesNotExist:
return '[No translation found]'
class NewsArticle(Article):
pass
class ArticleTranslation(models.Model):
article = models.ForeignKey(Article)
lang = models.CharField(max_length='2')

View File

@ -1,7 +1,9 @@
import datetime
from operator import attrgetter
from .models import Country, Person, Group, Membership, Friendship, Article, ArticleTranslation, ArticleTag, ArticleIdea
from .models import (
Country, Person, Group, Membership, Friendship, Article,
ArticleTranslation, ArticleTag, ArticleIdea, NewsArticle)
from django.test import TestCase
from django.utils.translation import activate
from django.core.exceptions import FieldError
@ -339,6 +341,20 @@ class MultiColumnFKTests(TestCase):
with self.assertRaises(FieldError):
Article.objects.filter(ideas__name="idea1")
def test_inheritance(self):
activate("fi")
na = NewsArticle.objects.create(pub_date=datetime.date.today())
ArticleTranslation.objects.create(
article=na, lang="fi", title="foo", body="bar")
self.assertQuerysetEqual(
NewsArticle.objects.select_related('active_translation'),
[na], lambda x: x
)
with self.assertNumQueries(1):
self.assertEqual(
NewsArticle.objects.select_related(
'active_translation')[0].active_translation.title,
"foo")
class FormsTests(TestCase):
# ForeignObjects should not have any form fields, currently the user needs