Django正在MySQL中创建两条记录而不是一条记录。
我通过链接调用函数
<a href="{% url 'markpresent' id=c.id %}"><button class="btn btn-primary">Thats Me!</button></a>
功能本身非常直接。我通过request.get获取变量,创建一个新对象,最后保存它。但是,当我检查数据库时,有两条记录,而不仅仅是一条记录。
def markpresent(request, id):
new_attendance = attendance(clientid_id = id, date = datetime.datetime.now(), camp = 3)
new_attendance.save()
return render(request, 'clienttracker/markpresent.html', {
'client': id,
})
模型
class attendance(models.Model):
clientid = models.ForeignKey(newclients, on_delete=models.CASCADE)
date = models.DateField()
camp = models.CharField(max_length = 3, default=0)
任何帮助和指示都将不胜感激。
基于答案的解决方案
<form action="{% url 'markpresent' %}" method="post">
{% csrf_token %}
<button type="submit" name="client" value="{{ c.id }}" class="btn btn-primary">Thats Me!</button>
</form>
def markpresent(request):
id = request.POST.get('client')
new_attendance = attendance(clientid_id = id, date = datetime.datetime.now(), camp = 3)
new_attendance.save()
return render(request, 'clienttracker/markpresent.html', {
'client': id,
})
由于
答案 0 :(得分:1)
您应该避免在GET请求上修改数据库。各种各样的事情可能会导致重复请求 - 例如,资产或图标的请求被相同的URL模式捕获并路由到同一视图 - 所以在数据库中添加条目之前,您应始终需要POST。
答案 1 :(得分:1)
您使用的是谷歌浏览器吗?如果是,那么Google Chrome就会延迟加载。因此,如果您要在Google Chrome中输入网址,它会尝试在后台加载网站,如果您点按“输入”,则会再次获取此网址。当你试图通过一个链接来修复锚时也是如此。这是一个边缘案例,但它发生了。尝试使用firefox或禁用该功能。