Я новичок в каналах Django и слежу за этим уроком на YouTube
https://www.youtube.com/watch?v=RVH05S1qab8
Все настройки работают отлично, но теперь я был поражен конфликтом в видео и общим кодом git hub. В видео, если вы точно зависли на 47:44, он покажет вам экран, на котором открыты 2 окна браузера со следующими URL,
127.0.0.1: 8000 / сообщения / jmitchell3 /
127.0.0.1:8000/messages/cfe/
Здесь обратите внимание, что cfe - это пользователь, вошедший в систему администратора django.
Теперь код менеджера модели говорит следующее:
class ThreadManager(models.Manager):
def by_user(self, user):
qlookup = Q(first=user) | Q(second=user)
qlookup2 = Q(first=user) & Q(second=user)
qs = self.get_queryset().filter(qlookup).exclude(qlookup2).distinct()
return qs
def get_or_new(self, user, other_username): # get_or_create
username = user.username
if username == other_username:
return None, False
qlookup1 = Q(first__username=username) & Q(second__username=other_username)
qlookup2 = Q(first__username=other_username) & Q(second__username=username)
qs = self.get_queryset().filter(qlookup1 | qlookup2).distinct()
if qs.count() == 1:
return qs.first(), False
elif qs.count() > 1:
return qs.order_by('timestamp').first(), False
else:
Klass = user.__class__
user2 = Klass.objects.get(username=other_username)
if user != user2:
obj = self.model(
first=user,
second=user2
)
obj.save()
return obj, True
return None, False
Представление использует метод в вышеприведенном менеджере, например, так:
def get_object(self):
other_username = self.kwargs.get("username")
print(other_username)
print(self.request.user)
obj, created = Thread.objects.get_or_new(self.request.user, other_username)
if obj == None:
raise Http404
return obj
Если вы заметили в ThreadManager, get_or_new возвращает «none, false», если имя пользователя в URL и зарегистрированный пользователь совпадают. Тогда как он может открыться в браузере? Возможно, я упускаю очень простой или глупый вопрос, но, пожалуйста, помогите, я какое-то время ломал голову над этим.