Python 提交表单时检查是否存在字段数据组合
我想让我的表单检查postgresql中是否已经存在相同的名称和日期,这样它就不会产生重复 models.py:Python 提交表单时检查是否存在字段数据组合,python,django,forms,Python,Django,Forms,我想让我的表单检查postgresql中是否已经存在相同的名称和日期,这样它就不会产生重复 models.py: class Event(models.Model): week = models.DateField(blank=False) name = models.ForeignKey(Employee, default=None, on_delete=models.CASCADE) sunday = models.CharField(max_length=50, default
class Event(models.Model):
week = models.DateField(blank=False)
name = models.ForeignKey(Employee, default=None, on_delete=models.CASCADE)
sunday = models.CharField(max_length=50, default=None, null=True)
monday = models.CharField(max_length=50)
tuesday = models.CharField(max_length=50)
wednesday = models.CharField(max_length=50)
thursday = models.CharField(max_length=50)
friday = models.CharField(max_length=50)
saturday = models.CharField(max_length=50, default=None, null=True)
def __str__(self):
return self.week
views.py:
def test2(request):
locationList = Location.objects.all().order_by('name') #Pulls location data from location table
clientList = Client.objects.all().order_by('name') #Pull client data from client table
if request.method == 'POST':
form1 = EventForm2(request.POST) #Displays form to be filled out by user
if form1.is_valid():
event = form1.save() #Saves form if valid data is entered
messages.info(request, 'Successfully added')
return HttpResponseRedirect(reverse('test2')) #Refreshes page to default
else:
form1 = EventForm2() #Form remains the same until valid data has been entered
eventList = Event.objects.all().order_by('week', 'name')
return render(request, 'app/test2.html', { # brings all the data into selected html
"form": form1,
"locationList": locationList,
"clientList": clientList,
"eventList": eventList,
})
因此,如2019年1月27日;数据库中已存在Bob Dylan,表单在视图中提交无效。您可以执行以下操作:
name = form1.cleaned_data['name']
week = form1.cleaned_data['week']
E = Event.objects.filter(name=name, week=week)
因此,如果len(e)大于0,则数据库中存在具有相同数据的对象
如果len(E)==0:则根据需要添加您也可以使用
.exists()
检查是否存在。是的,谢谢@seuling如果不需要重复,您应该在适当的模型字段(或字段组合)上定义一个唯一
约束,以在数据库中强制执行此操作。然后您可以捕获save()
上的异常IntegrityError:UNIQUE约束失败
,并在发生时进行处理。@EndreBoth sweet有效。有点不确定在哪里捕捉错误