Nomad
15 сентября 2020 г. 20:21

Django модель с полем choicefiled - проблемка в админке

django, admin, choicefield

всем привет
столкнулся с проблемкой.
есть некая модель пользователя, в которой есть поле:

  1. is_traider = models.IntegerField(default=0, blank=True, null=True, choices=TRAIDER_STATUS)

где

  1. TRAIDER_STATUS = ( ('0', 'User'), ('1', 'Company'), ('2', 'Self employed'), )

пользователя можно создать двумя способами: либо из фронта приложения (Регистрация) либо тупо зайти в админку django и создать пользователя
по умолчанию при создании пользователя по логике вещей, поле is_traider = 0

я создаю пользователя из админки джанго, после ввода емэйла и пароля попадаю на страницу деталей:

и как только выбираю значения для поля is_traider выскакивает ошибка:

может кто подсказать в чем проблема??

2

Вам это нравится? Поделитесь в социальных сетях!

3
Nomad
  • 15 сентября 2020 г. 20:51

всем привет еше раз
я решил вопрос
если для кого будет интересно то вот в чем заключалась проблема:

поле is_traider в моей модели типа IntegerField
а мой choices возврашал String, потому что у меня TRAIDER_STATUS = ( ('0', 'User'), ('1', 'Company'), ('2', 'Self employed'), )
я просто поменял в модели вот так: TRAIDER_STATUS = ( (0, 'User'), (1, 'Company'), (2, 'Self employed'), )

и все заработало ))))

    Илья Чичак
    • 16 сентября 2020 г. 1:34
    • (ред.)

    Я позволю себе предложить вам разделить это поле на два:

    1. is_traider = models.BooleanField()
    2. traider_type = models.IntegerField(...)

    или просто

    1. user_status
    если оно собирает в себе варианты, что он не только продает, а покупает. Просто само название подразумевает ДА или НЕТ

    Ну и стоит запихать варианты в константы:

    1. class User(AbstractUser):
    2. STATUS_USER = 0
    3. STATUS_COMPANY = 1
    4. STATUS_SELF_EMPLOYED = 2
    5.  
    6. TRAIDER_TYPES = (
    7. (STATUS_USER, 'User'),
    8. (STATUS_COMPANY, 'Company'),
    9. (STATUS_SELF_EMPLOYED, 'Self-employed')
    10. )
    11.  
    12. user_status = models.IntegerField(default=STATUS_USER, choices=TRAIDER_TYPES)

    потом сильно облегчит жизнь:

    1. User.objects.filter(user_type=User.STATUS_USER)
    2. ...
    3. if user.user_status == User.STATUS_COMPANY:
    4. ...
      Nomad
      • 16 сентября 2020 г. 15:54
      • Ответ был помечен как решение.

      спасибо за ваш комент
      про константы ... даже не подумал ... very good idea

        Комментарии

        Только авторизованные пользователи могут публиковать комментарии.
        Пожалуйста, авторизуйтесь или зарегистрируйтесь
        • Последние комментарии
        • IscanderChe
          12 апреля 2025 г. 17:12
          Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
        • AK
          1 апреля 2025 г. 11:41
          Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
        • Evgenii Legotckoi
          9 марта 2025 г. 21:02
          К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
        • VP
          9 марта 2025 г. 16:14
          Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
        • ИМ
          22 ноября 2024 г. 21:51
          Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…