Блокирование доступа к html-странице во время редактирования пользователем
У меня есть веб-приложение Django для бронирования времени соревнований по гольфу для членов клуба. После входа в систему все пользователи имеют возможность редактировать имена игроков для каждого времени. Затем они вручную сбрасываются на следующую неделю после соревнований. Проблема в том, что если более 1 пользователя редактируют одновременно, то сохраняется последний экземпляр, а другие не понимают. У меня есть список времен (с 4 слотами имен в каждом) на одной html-странице с кнопкой редактирования для каждого времени, которая ведет на отдельную html-страницу для редактирования этих 4 имен. Есть ли возможность заблокировать html-страницу, открытую одним пользователем? Или у меня была мысль создать кнопку рядом с "Edit", которая меняет цвет и текст (например, зеленый на красный, а "Open" на "Edit in progress"), на определенный период или пока не будет нажата кнопка "save" на странице обновления. Вот соответствующий код Models.py
class Post(models.Model):
time=models.CharField(max_length=50)
player1=models.CharField(max_length=50, default="Player 1")
player2=models.CharField(max_length=50, default="Player 2")
player3=models.CharField(max_length=50, default="Player 3")
player4=models.CharField(max_length=50, default="Player 4")
def __str__(self):
return self.time
Views.py
def teetimes(request):
posts=Post.objects.all()
name=CompNames.objects.get(id=1)
return render(request, 'memtees/teetimes.html', {'posts':posts, 'name':name})
def add(request):
if request.method=='POST':
time=request.POST['time']
player1=request.POST['player1']
player2=request.POST['player2']
player3=request.POST['player3']
player4=request.POST['player4']
Post.objects.create(time=time,player1=player1,player2=player2,player3=player3,player4=player4)
messages.success(request,'New Time has been added')
return render(request,'memtees/add.html')
def update(request,id):
if request.method=='POST':
time=request.POST['time']
player1=request.POST['player1']
player2=request.POST['player2']
player3=request.POST['player3']
player4=request.POST['player4']
Post.objects.filter(id=id).update(time=time,player1=player1,player2=player2,player3=player3,player4=player4)
messages.success(request,'Information has been updated, return to Tee-Times to view ')
post=Post.objects.get(id=id)
return render(request,'memtees/update.html',{'post':post})
def clear_players(request):
Post.objects.all().update(player1="", player2="", player3="", player4="")
return redirect('/memtees/teetimes')
def delete(request,id):
Post.objects.filter(id=id).delete()
return redirect('/memtees/teetimes')
Полный список времен HTML
{% for post in posts|dictsort:"time" %}
<div>
<table style="background-color:white" class="table table-bordered">
<tr>
<th colspan="4" style="margin:0" padding="0"><h7>{{post.time}} <a href="{% url 'update0' post.id %}" class="btn-sm btn-success">Update</a></h7></th>
</tr>
<tr>
<td style="width: 25%"><p style="font-size:small; margin-bottom:0">{{post.player1}}</p></td>
<td style="width: 25%"><p style="font-size:small; margin-bottom:0">{{post.player2}}</p></td>
<td style="width: 25%"><p style="font-size:small; margin-bottom:0">{{post.player3}}</p></td>
<td style="width: 25%"><p style="font-size:small; margin-bottom:0">{{post.player4}}</p></td>
</tr>
</table>
</div>
{% endfor %}
Для редактирования имен и сохранения HTML
<table class="table table-bordered">
<tr>
<th>Time</th>
<td>
<input value="{{post.time}}" type="text" name="time" class="form-control" readonly>
</td>
</tr>
<tr>
<th>Player 1</th>
<td>
<input value="{{post.player1}}" type="text" name="player1" class="form-control" onclick="player1.select()">
</td>
</tr>
<tr>
<th>Player 2</th>
<td>
<input value="{{post.player2}}" type="text" name="player2" class="form-control" onclick="player2.select()">
</td>
</tr>
<tr>
<th>Player 3</th>
<td>
<input value="{{post.player3}}" type="text" name="player3" class="form-control" onclick="player3.select()">
</td>
</tr>
<tr>
<th>Player 4</th>
<td>
<input value="{{post.player4}}" type="text" name="player4" class="form-control" onclick="player4.select()">
</td>
</tr>
<tr>
<td colspan="2">
<button type="submit" class="btn btn-primary btn-lg">Submit</button>
</td>
</tr>
</table>