Django ORM で非常に奇妙な問題に直面しています。単一のオブジェクトを返すことが期待される以下のクエリセットがありますmy_unique_key
が (一意の値と同様)、同じオブジェクトの複数のインスタンスを返しています (主キーのリストを確認してください):
my_model_queryset = MyModel.objects.filter(q, obj_key='my_unique_key')
# print my_model_queryset.values_list('id', flat=True)
# [63, 63, 63]
どこq
でQ()
コンテンツを含む関数:
some_keys = [u'yJodCsWTTYyi1NMW', u'MOAKea3MSVilbxVU', u'ZXy9ONNQ1MBAMzFT',
u'cuDAuxnAFiuItzDR', u'ZzULRBixdpW9MzC8', u'pYsXxXET0mTPgzl8',
u'C4LmGqhZeILPpgAq', u'gxbkRaMKxySOfkIm']
primary_keys = [6273L, 5974L, 6342L, 4076L, 4490L, 2892L, 3921L, 1554L, 1046L,
5977L, 5946L, 6269L]
q = (Q(cf_object__obj_key__in=some_keys)|
Q(related_my_mapping__cf_object__obj_key__in=some_keys)|
Q(id__in=primary_keys))
私のモデル構造は次のようなものです:
class MyModel(models.Model):
obj_key = models.CharField(max_length=50, unique=True)
cf_object = models.ForeignKey('CFModel', null=True, related_name='related_my_model')
# ...blah...blah...blah...
class Meta:
db_table = 'my_model'
class CFModel(models.Model):
obj_key = models.CharField(max_length=50, unique=True)
# ...blah...blah...blah...
class Meta:
db_table = 'cf_model'
class MyModelCFModelMapping(models.Model):
my_object = models.ForeignKey('MyModel', null=True, related_name='related_my_mapping')
cf_object = models.ForeignKey('CFModel', null=True, related_name='related_my_mapping')
# ...blah...blah...blah...
class Meta:
db_table = 'my_model_cf_model_mapping'
ただし、関数から1つの条件を次のように削除すると、完全に正常にq
機能します。
q = (Q(cf_object__obj_key__in=some_keys)|
Q(id__in=primary_keys))
Django が予期しない動作をする理由について何か考えはありますか?