2013-02-22 4 views
1

Я добавил логическое поле модель под названием «is_dotcom» на мой админ list_display и реализация:Джанго использование модели EmailField повышение AttributeError

email = models.EmailField(max_length=254) 

def is_dotcom(self): 
    return self.email.lower().endsWith(".com") 

is_dotcom.admin_order_field = 'email' 
is_dotcom.boolean = True 
is_dotcom.short_description = 'Company?' 

Но все это дает на моей странице администратора не является «(None)». Я ожидаю, что True/False (хотя иногда мои булевы показывают, как зеленый или красный чек не въездной знак, кто-нибудь знает, почему это так?)

Я на основе этого кода на примере в django tutorial.

Я предполагаю, что «(Нет)» отображается, потому что метод is_dotcom() создает атрибут AttributeError, который ждёт django. Я предполагаю, что законно вызывать .lower() на EmailField, но я точно не знаю (что вы делаете для справочной документации?) Спасибо.

ответ

1

Проблема заключается в этой строке:

return self.email.lower().endsWith(".com") 

Метод .endswith().
Обратите внимание на отсутствие верблюжьего чехла.

Упрощенный пример, который воспроизводит ошибку:

>>> 'foo'.endsWith('test') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'str' object has no attribute 'endsWith' 
+0

Спасибо! Проклинайте эти новомодные некомпилированные языки ;-) – jarmod

+0

Вы очень желанны. Я чувствую вашу боль :-) – bernie

+0

Также поняли, почему он показывал True/False вместо зеленого check/red no-entry для одного из моих булевых столбцов - я не задал field.boolean = True для этого столбца. Вам нужно больше кофе! – jarmod

Смежные вопросы