visible
以下の関数の2つのカウントクエリを1つのクエリにマージしようとしています。リレーションがない場合、またはリレーションがあり、特定のフィルタリングがtrueの場合、関数はTrueを返す必要があります。
class OtherModel(models.Model):
starts = models.DateField()
ends = models.DateField()
class MyModel(models.Model):
m2m = models.ManyToManyField('OtherModel', blank=True, )
def visible(self):
# Should always return True if no relations to OtherModel are present.
if self.m2m.exists():
# If relations to OtherModel are present check for starts and ends.
# The reason for the first check is that if there are no relations
# and the below query returns 0 the function will return False
today = datetime.date.today()
return self.m2m.filter(starts__lte=today, ends__gte=today).exists()
return True
編集:より多くのコードとコメント、countをexistsに置き換えました。
m2m関係は日付制限用ですが、日付制限が使用できない場合、関数はTrueを返す必要があります(制限がまったくない場合はオブジェクトが表示されますが、制限が存在するが現在の日付と一致しない場合は表示されません)。
サンプルコードは単純化された例です。これを実行し、実際にクエリセットも返す必要があります。