Hi I am getting this error over and over again when I press the link which should leed to 'conversation' project.owner.user which starts a new conversation between 2 users. Thanks for your help!
Here is my code:
directs/models.py
class Message(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user")
sender = models.ForeignKey(User, on_delete=models.CASCADE, related_name="from_user")
reciepient = models.ForeignKey(User, on_delete=models.CASCADE, related_name="to_user")
body = models.TextField(null=True)
date = models.DateTimeField(auto_now_add=True)
is_read = models.BooleanField(default=False)
def sender_message(from_user, to_user, body):
sender_message = Message(
user=from_user,
sender = from_user,
reciepient = to_user,
body = body,
is_read = True
)
sender_message.save()
reciepient_message = Message(
user=to_user,
sender = from_user,
reciepient = from_user,
body = body,
is_read = True
)
reciepient_message.save()
return sender_message
def get_message(user):
users = []
messages = Message.objects.filter(user=user).values('reciepient').annotate(last=Max('date')).order_by('-last')
for message in messages:
users.append({
'user': User.objects.get(pk=message['reciepient']),
'last': message['last'],
'unread': Message.objects.filter(user=user, reciepient__pk=message['reciepient'], is_read=False).count()
})
return users
directs/views.py
def inbox(request):
user = request.user
messages = Message.get_message(user=request.user)
active_direct = None
directs = None
profile = get_object_or_404(Profile, user=user)
if messages:
message = messages[0]
active_direct = message['user'].username
directs = Message.objects.filter(user=request.user, reciepient=message['user'])
directs.update(is_read=True)
for message in messages:
if message['user'].username == active_direct:
message['unread'] = 0
context = {
'directs':directs,
'messages': messages,
'active_direct': active_direct,
'profile': profile,
}
return render(request, 'directs/direct.html', context)
def NewConversation(request, username):
from_user = request.user
body = ''
try:
to_user = User.objects.get(username=username)
except Exception as e:
return redirect('search-users')
if from_user != to_user:
Message.sender_message(from_user, to_user, body)
return redirect('inbox')
directs/urls.py
urlpatterns = [
path('new/<username>', views.NewConversation, name="conversation"),
path('inbox/', views.inbox, name="inbox"),
]
projects/single-project.html
<div>
<a href="{% url 'conversation' project.owner.user %}">Send message</a>
</div>