私はジャンゴでのそれらのようなモデルを持っている:としてdjangoの1対1の左への結合はnullですか?
class User(models.Model):
name = models.CharField(max_length = 128)
class Message(models.Model):
sender = models.ForeignKey(User, related_name = 'messages_sent')
recipient = models.ForeignKey(User, related_name = 'messages_recieved')
subject = models.CharField(max_length = 128)
body = models.CharField(max_length = 3500)
class Response(models.Model):
message = models.OneToOneField(Message, primary_key = True)
reply = models.TextField()
を、私は、何の応答を持っていないユーザーのために、すべてのメッセージを取得するために、私はSQLで書くと何かをしようとしている:
select * from user u
join message m on (u.id = m.recipient_id)
left join response r on (m.id = r.message_id)
where r.message_id = null
私はこれを行うための自然な方法があることだろうと思うだろう:
u.messages_recieved.filter(response = None)
または
u.messages_recieved.filter(response__message_id__isnull = True)
が、常に生成されたSQLはされて終わる:
WHERE ("project_message"."recipient_id" = 1 AND "project_message"."id" IS NULL)
は私が愚かな何かをやっている、またはこれはジャンゴのバグですか?
ハ!したがって、上記のいずれも1.0.2では私のために働かないので、1.1RCで修正される可能性があります。私にチェックさせてください。 – tpk
これは1.1で修正されました。 1.1の最終リリースでテストされました。 – tpk
ORMはこの新しいバージョンで多くの改良を受けました。興味深いことに、私は1.0.3 Alpha&1.1で作業していましたが、どちらも同じクエリを生成しました。 – tarequeh