複数のテーブルからデータを取得する必要があり、動的に構築されたフィルターを使用して、テーブルのデータを使用する場合と使用しない場合があります。
だから私はこれを持っていると言います:
class Solution(models.Model):
name = models.CharField(max_length=MAX, unique=True)
# Other data
class ExportTrackingRecord(models.Model):
tracked_id = models.IntegerField()
solution = models.ForeignKey(Solution)
# Other data
次に、他の場所で行う必要があります。
def get_data(user_provided_criteria):
etr = ExportTrackingRecord.objects.filter(make_Q_object(user_provided_criteria)).select_related()
for data in etr:
s = data.solution
# do things with data from both tables
私の知る限り、Solution のフィールドでフィルターをかけると、django が結合を行い、select_related
両方のオブジェクトを取得します。フィールドのみをフィルタリングExportTrackingRecord
すると、結合は行われず、django はExportTrackingRecord
QuerySet 内のそれぞれに対して新しいクエリを生成します (数千になる可能性があります...)
私はdjangoにかなり慣れていませんが、参加を強制する合理的な方法はありますか?