Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果名称以Django开头,请取消选择_Python_Django_Python 3.x_Django Models_Django Forms - Fatal编程技术网

Python 如果名称以Django开头,请取消选择

Python 如果名称以Django开头,请取消选择,python,django,python-3.x,django-models,django-forms,Python,Django,Python 3.x,Django Models,Django Forms,感谢您抽出时间: 如果人们的名字以字母“a”开头,我想去掉一个选项: 基本上,如果People.nome或Animal.pessoa以字母“A”开头,我想去掉选项2“GATO”。有没有办法做到这一点,或者我应该尝试另一种方法,除了一个精选的领域 from django.db import models from django.core.validators import RegexValidator class People(models.Model): nome = models

感谢您抽出时间: 如果人们的名字以字母“a”开头,我想去掉一个选项:

基本上,如果People.nome或Animal.pessoa以字母“A”开头,我想去掉选项2“GATO”。有没有办法做到这一点,或者我应该尝试另一种方法,除了一个精选的领域

from django.db import models
from django.core.validators import RegexValidator



class People(models.Model):
    nome = models.CharField(max_length=200)
    birthday_date = models.DateField()
    cpf = models.CharField(max_length=11, validators=[RegexValidator(r'^\d{1,10}$')])

    def __str__(self):
        return '%s' % (self.nome)

def cant_have_cat(self):
    field_choices = [
        (1, 'CACHORRO'),
        (2, 'GATO'),
        (3, 'OUTRO'),
    ]
    self.maiusculo = self.pessoa.upper
    if self.maiusculo[0] == 'A':
        self.tipo != 2
    return field_choices

class Animal(models.Model):
    pessoa = models.ForeignKey(People, on_delete=models.CASCADE)
    name = models.CharField(max_length=100)
    tipo = models.IntegerField(choices=cant_have_cat)
    custo = models.DecimalField(max_digits=7, decimal_places=2)

    def __str__(self):
        return '%s %s' % (self.pessoa, self.name)

forms.py



class AnimalForm(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':
            Animal.tipo != 2
你可以覆盖你的动物形态的_____; init来处理逻辑。大概是这样的:

class AnimalForm(forms.ModelForm):
    field_choices = [
        (1, 'CACHORRO'),
        (2, 'GATO'),
        (3, 'OUTRO'),
    ]
    field_choices_subset = [
        (1, 'CACHORRO'),
        (3, 'OUTRO'),
    ]

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        if kwargs.get("instance") and kwargs.get("instance").pessoa.nome.startswith("a"):
            self.fields["tipo"].choices = field_choices_subset

    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')

它不起作用,我应该试着让人们成为一个用户吗?这会更容易吗?这与人们不是用户这一事实无关。我编辑了这个片段,我犯了一个错误。你能再试一次吗?还是不行,我要用request.user试试这个方法。现在我想会更容易。因为这样我要把Animal.pessoa字段和Animal.tipo字段放在同一个形式