Merge pull request #2734 from valberg/double_order_trouble

Fixed #22720 -- Migrations attempt to create _order twice.
This commit is contained in:
Andrew Godwin 2014-05-28 17:12:01 -07:00
commit 61185bba72
2 changed files with 23 additions and 1 deletions

View File

@ -167,7 +167,8 @@ class Options(object):
if self.order_with_respect_to:
self.order_with_respect_to = self.get_field(self.order_with_respect_to)
self.ordering = ('_order',)
model.add_to_class('_order', OrderWrt())
if not any(isinstance(field, OrderWrt) for field in model._meta.local_fields):
model.add_to_class('_order', OrderWrt())
else:
self.order_with_respect_to = None

View File

@ -4,6 +4,8 @@ from operator import attrgetter
from django.test import TestCase
from django.db import models
from .models import Post, Question, Answer
@ -71,3 +73,22 @@ class OrderWithRespectToTests(TestCase):
Post.objects.create(title="2.1", parent=p2)
p1_3 = Post.objects.create(title="1.3", parent=p1)
self.assertEqual(p1.get_post_order(), [p1_1.pk, p1_2.pk, p1_3.pk])
def test_duplicate_order_field(self):
class Bar(models.Model):
pass
class Foo(models.Model):
bar = models.ForeignKey(Bar)
order = models.OrderWrt()
class Meta:
order_with_respect_to = 'bar'
count = 0
for field in Foo._meta.local_fields:
if isinstance(field, models.OrderWrt):
count += 1
self.assertEqual(count, 1)