我有一个表,几个用户将添加日期。 每个用户可以添加一个日期。但是您只能将该日期添加一次。 如何防止用户多次添加同一日期? 预先感谢!
models.py
class MarcacaoRefeicoes(models.Model):
class Meta:
ordering = ['-data']
verbose_name = 'Marcação de Refeição'
verbose_name_plural = 'Marcação de Refeições'
user = models.ForeignKey(User, related_name='marcacao_refeicoes', on_delete=models.CASCADE)
data = models.DateField(null=True, verbose_name='Data')
def __str__(self):
return '{}'.format(self.data)
views.py
def marcacao_refeicoes_adicionar(request, pk=None):
user = get_object_or_404(User, id=pk)
form = MarcacaoRefeicoesForm(request.POST or None, request.FILES or None, initial={'user': pk})
if form.is_valid():
instance = form.save(commit=False)
instance.save()
messages.success(request, 'Marcação adicionada com sucesso!')
return HttpResponseRedirect(reverse("marcacao_refeicoes", kwargs={'pk': pk}))
context = {
"user": user,
"form": form,
}
return render(request,
'gestao/area_individual/marcacao_refeicoes/adicionar.html', context)
答案 0 :(得分:3)
您正在寻找unique_together-它将禁止用户和日期具有相同的组合。
class MarcacaoRefeicoes(models.Model):
class Meta:
unique_together = ['user', 'data']
ordering = ['-data']
verbose_name = 'Marcação de Refeição'
verbose_name_plural = 'Marcação de Refeições'
user = models.ForeignKey(User, related_name='marcacao_refeicoes', on_delete=models.CASCADE)
data = models.DateField(null=True, verbose_name='Data')
def __str__(self):
return '{}'.format(self.data)
如果您使用的是django 2.2,则应改用UniqueConstraint,因为以后unique_together
可能会被弃用。
class MarcacaoRefeicoes(models.Model):
class Meta:
constraints = [
models.UniqueConstraint(fields=['user', 'data'], name='unique_item')
]
ordering = ['-data']
verbose_name = 'Marcação de Refeição'
verbose_name_plural = 'Marcação de Refeições'
user = models.ForeignKey(User, related_name='marcacao_refeicoes', on_delete=models.CASCADE)
data = models.DateField(null=True, verbose_name='Data')
def __str__(self):
return '{}'.format(self.data)