私は2つのDjangoモデルを持っています:
class Person(models.Model):
unique_id = models.CharField()
class PersonData(models.Model):
person = models.ForeignKey('Person')
phone = models.CharField()
email = models.CharField()
date = models.DateTimeField()
PersonData
情報が変更されると新しいオブジェクトが追加されますが、古いオブジェクトは保持されます。次に、PersonData
関連する最新のオブジェクトからのデータで人をフィルタリングするフィルターが必要です。
私は次のクエリセットを持っています:
filter_email = "[email protected]"
filter_phone = "964477425"
qs = Person.objects.all()
if filter_email:
qs = qs.filter(persondata__email__icontains=filter_email)
if filter_phone:
qs = qs.filter(persondata__phone__icontains=filter_phone)
ただし、そのフィルターは、にPersonData
関連付けられているすべてのオブジェクトを検索しますPerson
。このフィルターを最新のPersonData
オブジェクトのみに制限することは可能ですか?
これは、1つのフィールドの一意の値に対する最新/最も古いエントリが必要な一般的なタイプのクエリです。
他の答えが何を示唆しているのかを深く考えれば、それらが目的を果たさないことが理解できると思います。
whole object
単一のdjangoクエリ(Note that it is possible to get one field but not all fields, also it is possible to fetch all fields in raw **sql** queries
)で目的のフィルターを使用してフェッチする方法はありません。
この問題に取り組むために私が知っている方法の1つは、Person
最新のPersonData
オブジェクトに外部キーを入れ、の新しいオブジェクトPersonData
が作成されるたびにそれを更新することです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加