【问题标题】:Check if combination of field data exist when submitting a form提交表单时检查是否存在字段数据组合
【发布时间】:2019-06-26 03:26:49
【问题描述】:

我希望我的表单检查 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=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,
  })

所以如果例如27-01-2019; Bob Dylan 已存在于数据库中,该表单将无法提交

【问题讨论】:

  • 如果不需要重复,您应该在适当的模型字段(或字段组合)上定义unique 约束以在数据库中强制执行此操作。然后您可以在save() 上捕获异常IntegrityError: UNIQUE constraint failed 并在它发生时处理它。
  • @EndreBoth 很好用。有点不确定在哪里捕获错误

标签: python django forms


【解决方案1】:

在视图中,您可以执行以下操作:

name = form1.cleaned_data['name']
week = form1.cleaned_data['week']
E = Event.objects.filter(name=name, week=week)

所以如果 len(e) > 0 那么在 DB 中有一个具有相同数据的对象

如果 len(E) == 0: 然后根据需要添加

【讨论】:

  • 您也可以使用.exists() 来检查是否存在。
  • 是的,谢谢@seiling
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多