Спасибо за ваше время: я бы хотел снять один вариант выбора, если имя People начинается с буквы 'a':
, в основном, если People.nome или People.user начинаются с буквы «А» Я бы хотел снять выбор (2, «GATO»). Есть ли способ сделать это, или я должен попробовать другой подход, кроме ChoiceField
models.py
User = get_user_model()
class People(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
nome = models.CharField(max_length=200)
birthday = models.DateField()
cpf = models.CharField(max_length=11, validators=[RegexValidator(r'^\d{1,10}$')])
def __str__(self):
return '%s' % (self.nome)
field_choices1 = [
(1, 'CACHORRO'),
(2, 'GATO'),
(3, 'OUTRO')
]
field_choices2 = [
(1, 'CACHORRO'),
(3, 'OUTRO')
]
def field_choice():
one = People.user
slug = slugify(one)
big = slug.upper()
initial_big = big[0]
if initial_big == 'A':
return field_choices1
else:
return field_choices2
class Pets(models.Model):
pessoa = models.ForeignKey(People, on_delete=models.CASCADE)
nome = models.CharField(max_length=150)
custo = models.DecimalField(max_digits=7, decimal_places=2)
tipo = models.SmallIntegerField(choices=field_choice())
forms.py
class PetForm(forms.ModelForm):
field_choices = [
(1, 'CACHORRO'),
(2, 'GATO'),
(3, 'OUTRO'),
]
name = forms.CharField(max_length=100)
tipo = forms.ChoiceField(choices=field_choices)
custo = forms.DecimalField(max_digits=7, decimal_places=2)
class Meta:
prefix = 'animal'
model = Animal
fields = ('name', 'tipo', 'custo')
def clean(self):
people_name = self.People.nome
upper = people_name.upper()
if upper[0] == 'A':
Pets.tipo != 2
я пытался o пара способов:
попытка models.py всегда возвращает field_choices2
попытка forms.py возвращает полное поле field_choices