Обратный поиск для полей с выбором в моделях django
У меня есть следующая модель :
class Role(models.Model) :
class RoleTypes(models.TextChoices) :
PAID = 'P', 'Paid'
UNPAID = 'U', 'Unpaid'
COLLABORATION = 'C', 'Collaboration'
role_type = models.CharField(max_length=5, choices=RoleTypes.choices, default=RoleTypes.PAID)
role_count = models.IntegerField(default = 1, validators=[MinValueValidator(1), MaxValueValidator(10)])
И следующий сериализатор :
class RoleSerializer(serializers.ModelSerializer):
class Meta :
model = Role
fields = '__all__'
Теперь ресурс Role создается путем передачи следующих данных в пост-запросе :
{'role_type':'P', 'role_count':2}
Возможно ли, что данные, отправленные в post-запросе, устанавливают role_type = 'Paid' вместо 'P'
Возможно ли, что данные, отправленные в почтовом запросе, устанавливают
role_type = 'Paid'
вместо'P'
.
Вы можете установить "id" на:
class Role(models.Model): class RoleTypes(models.TextChoices): PAID = 'Paid', 'Paid' UNPAID = 'Unpaid', 'Unpaid' COLLABORATION = 'Collab', 'Collaboration' role_type = models.CharField( max_length=6, choices=RoleTypes.choices, default=RoleTypes.PAID ) # …
поскольку это идентификатор опции.
If you mean send the label, that would probably not be a good idea: the label is not per se a string, in fact it is often a lazy translatable string [Django-doc], so where the eventually string depends on the activated language, or a safe string (with mark_safe(…)
[Django-doc]). This thus means that it is not even said that we can recuperate the label when the request was made, or check for equality.
Хотя вы, вероятно, можете подклассифицировать поле формы, чтобы оно искало соответствующую метку, по веским причинам оно использует более "стабильный" маркер, P
в случае использования PAID = 'P', 'Paid'
, или 'Paid'
в случае PAID = 'Paid', 'Paid'
. Использование метки - не самая лучшая идея.
Вы также должны рассматривать то, что именно передается в качестве данных запроса, как деталь реализации, подобно тому, как AutoField
хранит данные в виде целого числа, но сложение двух первичных ключей вместе не имеет смысла, поэтому вы не должны интроспектировать значение.