この問題は何度か起きましたが、私は別の理由からそれを得ていると思いますが、少なくともそれがどのように関連しているかはわかりません。Django - 割り当てることができません、インスタンスでなければなりません
ジャンゴ:1.10.5、Pythonの:3.5.2、Postgresでは:だから9.5
、私が持っているようなモデル(簡体字):
class ChildQuerySet(models.query.QuerySet):
def find_recent(self):
return self.order_by('-date_created')
Child.objects = ChildQuerySet.as_manager()
:
class Parent(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
date_created = models.DateTimeField(auto_now=True)
class Child(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
date_created = models.DateTimeField(auto_now=True)
parent = models.ForeignKey(Parent)
def __init__(self, parent, *args, **kwargs):
super(Child, self).__init__(*args, **kwargs)
self.parent = parent
私は、カスタムクエリセットを持っています
その後、私は子供のためのいくつかのカスタムクエリセットのメソッドをテストしようとしている:
class ChildQuerysetDatabaseIntegrationTest(TestCase): # from django.test
default_parent = Parent()
def setUp(self):
super(ChildQuerysetDatabaseIntegrationTest, self).setUp()
self.default_parent.save()
def test_find_recent(self):
# given
for _ in range(1, 10):
child = Child(self.default_parent)
child.save()
# when
recent = Child.objects.find_recent()
ordered = Child.objects.order_by('-date_created')
# then
self.assertEqual(list(ordered), list(recent))
これはテスト(すべてのエンティティをフェッチ)の最後の行に次のエラーを生成します、いくつかのマッピング・エラーがあるとき
ValueError: Cannot assign "UUID('...')": "Child.parent" must be a "Parent" instance.
は通常、エラーが実体セーブ中にスローされますが、ここではすべてが正常に永続化するようです検索に失敗します。
親インスタンスに割り当てようとしているUUIDオブジェクトは、実際には子のIDオブジェクトであり、私をさらに混乱させます。
オブジェクトの作成をParent.objects.create()に変更しようとしましたが、結果は変更されませんでした。 ordered.first()のようなChildオブジェクトを取得する関数を呼び出すこともできないので、何が起こっているのか分かりません。
'find_recent'はバニラではないので、あなたが明らかにマネージャのコードを表示する必要があります(' find_recent'のコードのように)。 – jknupp