get_or_create
メソッドを使用してレコードが存在するかどうかを調べようとしています。レコードが存在する場合は、何も作成しません。get_or_create 0個のオブジェクトを返すフィルターを使って同じパラメーターをチェックすると、オブジェクトの複数の値が存在するというエラーを返します。
このモデルは、基本的に
class modelStudentExamsPerformed(models.Model):
patient = models.ForeignKey(modelPatient)
student = models.ForeignKey(modelStudent,on_delete=models.CASCADE)
normalBodyPart = models.ForeignKey(modelNormalBodyPartResult,default=None,blank=True,null=True)
abnormalBodyPart = models.ForeignKey(modelAbnormalBodyPartResult,default=None,blank=True,null=True)
tool = models.CharField(max_length=128, default="")
を失敗しているコマンドで使用されている今、これは上記の文は私にエラーを与える上記のモデルを使用して
exams.modelStudentExamsPerformed.objects.get_or_create()(patient=patient_qset, student=stud_qset,abnormalBodyPart=qset[0],normalBodyPart=None,date=None)
を失敗しているコマンドです。
get() returned more than one modelStudentExamsPerformed -- it returned 2!
ここで私は問題を抱えています。私は私の管理者を通してデータベースを調べると、2つのオブジェクトに気付いていますが、これらのオブジェクトは両方ともnormalBodyPart
の値を持ち、abnormalBodyPart
は空です。明示的に指定してabnormalBodyPart
に値を割り当てたのはなぜですか?私はこれが理にかなってほしい。
2つのステートメント1と2があるとします。 ステートメント1は、指定されたパラメーターに基づいてレコードを取得または作成します。 djangoは既に2つのレコードがあると考えるので、このgetまたはcreateは失敗します。しかし、文2は同じ正確なパラメータを使用し、0レコードを返します。何故ですか ?私は何が分からず、ここで理解していないのですか?
ステートメント1:
exams.modelStudentExamsPerformed.objects.get_or_create()(patient=patient_qset, student=stud_qset,abnormalBodyPart=qset[0],normalBodyPart=None,date=None)
この表のオブジェクトのはっきりどれもabnormalBodyPart
の値を持っていません。
k = exams.modelStudentExamsPerformed.objects.filter(patient=patient_qset, student=stud_qset,abnormalBodyPart=qset[0], normalBodyPart=None,date=None)
上記なステートメント2は何も返しません:私は、次の
文2を実行して、これを検証しました。私の質問は、ステートメント2が何も返さないのはなぜですか?ステートメント1は既に2つのアイテムがあるので、get
コールに失敗していると不平を言います。
は、あなたが本当に.... get_or_create **()(**患者= patient_qsetを持っていますか? **(それは__call __()メソッドの呼び出し、その後、あなたは空の引数を指定してオブジェクトを取得または作成します。それについて考えてみてください。)**緩め。 – Melvyn
うんそれは私がオンラインの例からこれを得た意味があります。私は、彼らがタイプミスがあったと思いますと私はちょうど彼らのタイプミスをコピーしました – MistyD
@メルビンのthトリックはやった。それを答えに入れることができますか? – MistyD