python - 在基于模型 DJANGO 的 ForeignKey 字段的字段上引发错误
问题描述
谢谢你的时间:
我有一个模型可以通过 OneToOneField 获取更多用户信息,并且用户名在保存时变为 Pets.pessoa 字段
如果外键字段(Pets.pessoa)以 'a' 和 Pets.tipo == 2 开头,我想提出一个错误
即使出现错误,我也会创建对象
模型.py:
class People(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='person')
birthday = models.DateField()
cpf = models.CharField(max_length=11, validators=[RegexValidator(r'^\d{1,10}$')])
def __str__(self):
return '%s' % (self.user)
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()
def __str__(self):
return '%s - %s' % (self.pessoa, self.nome)
表格.py:
class PetForm3(forms.ModelForm): #SELECIONAR FORM PELO FORMS.PY
field_choices = [
(1, 'CACHORRO'),
(2, 'GATO'),
(3, 'OUTRO')
]
nome = forms.CharField(max_length=100)
custo = forms.DecimalField(max_digits=7, decimal_places=2)
tipo = forms.ChoiceField(choices=field_choices)
def clean(self, *args, **kwargs):
pessoa_data = self.cleaned_data.get('pessoa')
pessoa_string = slugify(pessoa_data)
tipo_data = self.cleaned_data.get('tipo')
if pessoa_string.startswith('a') and tipo_data==2:
raise ValidationError('User começando com A não pode ter gato')
return super(PetForm3, self).clean(*args, **kwargs)
视图.py:
def create_pet_form(request):
if request.method == 'POST':
form = PetForm3(request.POST)
pet = form.save(commit=False)
pet.pessoa = request.user.person
if form.is_valid():
form.save()
else:
form = PetForm3()
context = {
'form': form
}
return render(request, 'petform3.html', context)
解决方案
def create_pet_form(request):
if request.method == 'POST':
form = PetForm3(request.POST)
if form.is_valid():
pet = form.save(commit=False)
pet.pessoa = request.user.person
form.save()
else:
form = PetForm3()
context = {
'form': form
}
return render(request, 'petform3.html', context)
如果这项工作
推荐阅读
- javascript - ng-change 有时使用 Select 标签也不起作用?
- java - Selenium:检查任何时间点存在的元素
- python - 访问 tkinter Python 3 中的顶部窗口面板按钮?(最大化、最小化、关闭)
- jgrasp - 编译器失败,但未检测到错误行
- javascript - 生成具有相关概率的随机字符串
- python - 从字符串创建熊猫数据框
- visual-studio-2017 - BindingNavigator:AddItem 按钮保存表单,但不清除新记录的表单
- c# - While(true) 循环停止?
- ios - IOS谷歌地图
- dart - 类重置变量