次のモデルを検討してください。
class Artist(GalleryMixin, models.Model):
name = models.CharField(max_length=200)
class Exhibition(GalleryMixin, models.Model):
name = models.CharField(max_length=200, verbose_name=_(u'title'))
artists = models.ManyToManyField('Artist')
ここで、 を追加し、ウェブサイト上でより優れたpublish_on
DateTimeField
オブジェクトを見たくないので、(ドキュメントを使用して) マネージャーを作成しました。これは次のようになります。publish_date
datetime.datetime.now()
class PublicObjectManager(models.Manager):
use_for_related_fields = True
def get_query_set(self):
qs = super(PublicObjectManager, self).get_query_set()
qs = qs.filter(publish_on__lte=datetime.datetime.now())
return qs
class Artist(GalleryMixin, models.Model):
name = models.CharField(max_length=200)
publish_on = models.DateTimeField(null=True, blank=True)
public_objects = PublicObjectManager()
objects = models.Manager()
class Exhibition(GalleryMixin, models.Model):
name = models.CharField(max_length=200, verbose_name=_(u'title'))
artists = models.ManyToManyField('Artist')
publish_on = models.DateTimeField(null=True, blank=True)
public_objects = PublicObjectManager()
objects = models.Manager()
これはうまく機能します。公開されていないオブジェクトはウェブサイトに表示されません...しかし、管理者は公開されていないオブジェクトを見ることができません! したがって、もちろん管理クエリセットをオーバーライドすることはできますが、リレーションクエリセットをオーバーライドするのは困難です。つまり、管理者はSelect
フィールドを使用して、公開されていないオブジェクトへのリレーションを作成できませんでした。
すなわち。admin は、Exhibition.artists で公開されていないアーティストを選択できません。
これについてどう思いますか?