Возможно, вы захотите сделать ForeignKey
из UserProfile
в модель ChatRoom
:
class UserProfile(models.Model):
<b>room</b> = models.<b>ForeignKey(</b>ChatRoom, on_delete=models.PROTECT<b>)</b>
# …
Затем вы можете отфильтровать комнаты, чтобы разрешить только одну, созданную пользователем с:
from django.contrib.auth.decorators import login_required
@login_required
def rooms(request):
# the ChatRoom or None
room = ChatRoom.objects.filter(userprofile__user=request.user).first()
return render(request,'chat/rooms.html',{'room': room})
Поскольку пользователь может принадлежать только к одной комнате, как вы говорите, это, таким образом, одна комната.
В вашем методе home
мы можем использовать get_object_or_404(…)
[Django -doc] , чтобы поднять 404 в случае, если комната не принадлежит пользователю:
from django.contrib.auth.decorators import login_required
from django.shortcuts import get_object_or_404
@login_required
def home(request, room_id):
room = <b>get_object_or_404(</b>ChatRoom, eid=room_id, userprofile__user=request.user<b>)</b>
# …
При этом, если пользователь может быть только член одного ChatRoom
, тогда нет смысла включать его в URL. Вы можете просто войти в чат, как показано выше.
Примечание : вы можете ограничить просмотры представлением для аутентифицированных пользователей с помощью декоратора @login_required
[Django -doc] .