Избежать ошибки: объект 'NoneType' не имеет атрибута в модели django model admin
Мне нужно показать, активен ли у клиента связанный контракт или нет в настраиваемом поле
в админке модели django
Я пытался использовать try:
, но это не работает, к сожалению
вот оригинальный код:
class ClientAdmin(ExportModelAdminMixin, ModelAdmin):
model = Client
menu_icon = "pick"
menu_order = 100
exclude_from_explorer = False
list_display = ["name", "is_active"]
search_fields = ["name"]
list_filter = [ClientFilter]
index_template_name = "wagtailadmin/export_csv.html"
csv_export_fields = ["name"]
def is_active(self, client: Client) -> bool:
any(site.current_contract.is_active for site in client.sites.all())
is_active.boolean = True # type: ignore
is_active.short_description = _("active confirmation") # type: ignore
Я получил ошибку:
File "/home/oladhari/reachat-v4/Reachat-v4/backend/crm/admin.py", line 61, in is_active
any(site.current_contract.is_active for site in client.sites.all())
File "/home/oladhari/reachat-v4/Reachat-v4/backend/crm/admin.py", line 61, in <genexpr>
any(site.current_contract.is_active for site in client.sites.all())
AttributeError: 'NoneType' object has no attribute 'is_active'
для решения этой ошибки я попытался использовать try:
и изменил настраиваемое поле на следующее:
def is_active(self, client: Client) -> bool:
try:
any(site.current_contract.is_active for site in client.sites.all())
except ObjectDoesNotExist:
return False
else:
return any(site.current_contract.is_active for site in client.sites.all())
но все еще та же ошибка, к сожалению. пожалуйста, не могли бы вы помочь мне избежать этой ошибки, спасибо
Почему бы не использовать обычный запрос для метода is_active
?
Итак, что-то вроде:
def is_active(self, client: Client) -> bool:
return client.sites.filter(current_contract__is_active=True).exists()