У меня возникли проблемы с передачей параметров в тип класса Django models.textChoices; Я получаю ошибки в переопределении ___next__(), когда пытаюсь добавить дополнительные поля:
TypeError: MyPets.FleaPlans.__new__() missing 1 required positional argument: 'label'
Параметры должны соответствовать передаваемым данным кортежа. По умолчанию используется значение двух параметров, label, но мне нужно третье, другое значение, desc, label. Независимо от того, в каком порядке я это делаю, я получаю ошибку позиционного параметра.
Если я передаю только 2 параметра в функцию __new__(cls, value, label), это не приведет к ошибке, но если я передам три параметра __new__(cls, value, desc, label), это приведет к ошибке. Кажется, это последний параметр, если я изменю порядок.
Я могу установить его в строку, так что кажется, что ошибка связана с передачей параметров, чтением моего списка кортежей.
Мои данные отладки — это всего лишь две записи для тестирования, и я закомментировал разные тестовые коды __new__ и __init__.
Ссылка на пример поиска для добавления дополнительных полей
Предлагаемый метод:
from django.db import models
class ColorChoices(models.TextChoices):
def __new__(cls, value, label, hex_code):
obj = str.__new__(cls, value)
obj._value_ = value
obj.label = label
obj.hex_code = hex_code
return obj
RED = 'R', 'Red', '#FF0000'
GREEN = 'G', 'Green', '#00FF00'
BLUE = 'B', 'Blue', '#0000FF'
# Usage
print(ColorChoices.RED.hex_code) # Output: #FF0000
Код:
from django.db import models
# from accounts import CustomUser
from django.apps import apps
from django.conf import settings
from django.core.validators import MinValueValidator, MaxValueValidator
from datetime import datetime, timedelta , date
from dateutil.relativedelta import relativedelta
from django.utils import timezone
class MyPets(models.Model):
class SexChoices(models.TextChoices):
FEMALE = 'F', 'Female'
MALE = 'M', 'Male'
UNSPECIFIED = 'U', 'Unspecified'
# You can add more comprehensive options as needed
class FleaPlans(models.TextChoices):
REVOLUTION = ('REV','Revolution - Monthly treatment/ every 31 days','Revolution')
NONE = ('NON','No Treatment plan selected','None')
def __new__(cls,value,desc,label):
obj = str.__new__(cls,value)
obj._value_ = value
obj._label_ = label
obj.desc = "description"
# obj.cycle = "cycle"
return obj
# it's used in this field
#
flea_treatment_plan = models.CharField( max_length=3, default=FleaPlans.NONE,
choices=FleaPlans.choices, verbose_name='flea treatment plan')
Самый простой способ увидеть ошибку — через Python/Django Shell:
class FleaPlans(models.TextChoices):
......
return obj
File "/home/edwardjs55/.virtualenvs/pet_venv/lib/python3.13/site-packages/django/db/models/enums.py", line 49, in __new__
cls = super().__new__(metacls, classname, bases, classdict, **kwds)
File "/usr/local/lib/python3.13/enum.py", line 568, in __new__
enum_class = super().__new__(metacls, cls, bases, classdict, **kwds)
File "/usr/local/lib/python3.13/enum.py", line 268, in __set_name__
enum_member = enum_class._new_member_(enum_class, *args)
TypeError: MyPets.FleaPlans.__new__() missing 1 required positional argument: 'label'
Класс Django models.textChoices добавляет дополнительные поля __new__ () ошибка позиционного аргумента ⇐ Python
Программы на Python
1779057308
Anonymous
У меня возникли проблемы с передачей параметров в тип класса Django models.textChoices; Я получаю ошибки в переопределении ___next__(), когда пытаюсь добавить дополнительные поля:
TypeError: MyPets.FleaPlans.__new__() missing 1 required positional argument: 'label'
Параметры должны соответствовать передаваемым данным кортежа. По умолчанию используется значение двух параметров, label, но мне нужно третье, другое значение, desc, label. Независимо от того, в каком порядке я это делаю, я получаю ошибку позиционного параметра.
Если я передаю только 2 параметра в функцию __new__(cls, value, label), это не приведет к ошибке, но если я передам три параметра __new__(cls, value, desc, label), это приведет к ошибке. Кажется, это последний параметр, если я изменю порядок.
Я могу установить его в строку, так что кажется, что ошибка связана с передачей параметров, чтением моего списка кортежей.
Мои данные отладки — это всего лишь две записи для тестирования, и я закомментировал разные тестовые коды __new__ и __init__.
Ссылка на пример поиска для добавления дополнительных полей
Предлагаемый метод:
from django.db import models
class ColorChoices(models.TextChoices):
def __new__(cls, value, label, hex_code):
obj = str.__new__(cls, value)
obj._value_ = value
obj.label = label
obj.hex_code = hex_code
return obj
RED = 'R', 'Red', '#FF0000'
GREEN = 'G', 'Green', '#00FF00'
BLUE = 'B', 'Blue', '#0000FF'
# Usage
print(ColorChoices.RED.hex_code) # Output: #FF0000
Код:
from django.db import models
# from accounts import CustomUser
from django.apps import apps
from django.conf import settings
from django.core.validators import MinValueValidator, MaxValueValidator
from datetime import datetime, timedelta , date
from dateutil.relativedelta import relativedelta
from django.utils import timezone
class MyPets(models.Model):
class SexChoices(models.TextChoices):
FEMALE = 'F', 'Female'
MALE = 'M', 'Male'
UNSPECIFIED = 'U', 'Unspecified'
# You can add more comprehensive options as needed
class FleaPlans(models.TextChoices):
REVOLUTION = ('REV','Revolution - Monthly treatment/ every 31 days','Revolution')
NONE = ('NON','No Treatment plan selected','None')
def __new__(cls,value,desc,label):
obj = str.__new__(cls,value)
obj._value_ = value
obj._label_ = label
obj.desc = "description"
# obj.cycle = "cycle"
return obj
# it's used in this field
#
flea_treatment_plan = models.CharField( max_length=3, default=FleaPlans.NONE,
choices=FleaPlans.choices, verbose_name='flea treatment plan')
Самый простой способ увидеть ошибку — через Python/Django Shell:
class FleaPlans(models.TextChoices):
......
return obj
File "/home/edwardjs55/.virtualenvs/pet_venv/lib/python3.13/site-packages/django/db/models/enums.py", line 49, in __new__
cls = super().__new__(metacls, classname, bases, classdict, **kwds)
File "/usr/local/lib/python3.13/enum.py", line 568, in __new__
enum_class = super().__new__(metacls, cls, bases, classdict, **kwds)
File "/usr/local/lib/python3.13/enum.py", line 268, in __set_name__
enum_member = enum_class._new_member_(enum_class, *args)
TypeError: MyPets.FleaPlans.__new__() missing 1 required positional argument: 'label'
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия