Измените поле choice_, если имя начинается с A Django - PullRequest
0 голосов
/ 13 марта 2020

Спасибо за ваше время: я бы хотел снять один вариант выбора, если имя 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

...