В моем приложении Django у меня есть Guest
учетные записи пользователей, которые созданы для всех незарегистрированных пользователей (у них всех есть email='guest@mysite.com '). В то же время я создаю несколько демонстрационных объектов , связанных с учетной записью гостя.
Эти объекты находятся в той же таблице (имеют ту же модель), что и объекты для зарегистрированных пользователей. И у меня есть более одного типа (модели) этих объектов, таких как:
class Object1(models.Model):
user = ForeignKey(...)
...
class Object2(models.Model):
user = ForeignKey(...)
...
И что я хотел бы добиться, это отфильтровать все объекты, связанные с гостевыми учетными записями, когда я их просматриваю в django admin .
Прямо сейчас я создаю подкласс django.contrib.admin.views.main.ChangeList
и переопределяю метод get_query_set
, чтобы выполнить необходимое исключение, и переопределяю get_changelist
метод класса ModelAdmin в django во время выполнения:
class FilteredChangeList(ChangeList):
def get_query_set(self):
qs = super(FilteredChangeList, self).get_query_set()
if is_related_to(self.model, Profile):
qs = qs.exclude(user__email='guest@mysite.com')
return qs
def my_getchangelist(self, request, **kwargs):
return FilteredChangeList
ModelAdmin.get_changelist = my_getchangelist
Я полагаю, что переопределение методов django во время выполнения является плохой практикой, поэтому есть ли правильное решение проблемы?