型号.py
class Registrierung(models.Model):
kategorie = models.ForeignKey(Kategorie)
sportler = models.ForeignKey(Sportler)
date_added = models.DateTimeField(auto_now_add=True)
class Meta:
unique_together = (('kategorie', 'sportler'),)
视图.py
def registrieren_user(request, kategorie_id):
kategorie = get_object_or_404(Kategorie, pk=kategorie_id)
user = get_object_or_404(User, pk=request.user.id)
reg = Registrierung(kategorie=kategorie, sportler=user.account.sportler)
reg.is_valid():
reg.save()
return HttpResponseRedirect(reverse('events:events'))
嗨,我正在努力防止重复在我的数据库。如果在“管理”面板中重复输入Registrierung,则会收到一条错误消息,说明由于唯一的\u together关系,无法创建对象。你知道吗
如何在我的视图中获得此功能?registrieren\u user的每次执行都会被保存,尽管这不可能。你知道吗
编辑: 我的解决办法,但我认为一定有更好的办法。我只是用了一种方法,我不创建一个重复,但它仍然是不防止的标准。你知道吗
视图.py编辑:
def registrieren_user(request, kategorie_id):
kategorie = get_object_or_404(Kategorie, pk=kategorie_id)
sportler= get_object_or_404(Sportler, pk=request.user.account.sportler.id)
registrierungen = kategorie.registrierung_set.all()
try:
# Look if entry already exists
reg = Registrierung.objects.filter(kategorie=kategorie).filter(sportler=sportler)
except:
# If no entry exists, create one and save it.
reg = Registrierung(kategorie=kategorie, sportler=sportler)
reg.save()
context = {
'kategorie': kategorie,
'registrierungen': registrierungen,
}
return render(request, 'events/kategorie.html', context)
# Return error_message because entry already exists.
context = {
'kategorie': kategorie,
'error_message': "Du bist schon registriert.",
'registrierungen': registrierungen,
}
return render(request, 'events/kategorie.html', context)
更好的解决方案是,执行一个模型级清理方法,如下所示
相关问题 更多 >
编程相关推荐