I have a simple project that i have been working on for almost 3 days now and this project is a chat app that you can send and receive message. So i want to add a time that when i send a message just like in facebook messenger it have "just now", "2 mins ago or hour ago", "6 days ago", and also "the year and the time that i send that message". So i found a solution using react and js but i don't have any knowledge with react and js. Can someone help me to add a message sent time like messenger on my chat app project.
views.py
def message_view(request, sender, receiver):
if not request.user.is_authenticated:
return redirect('index')
if request.method == "GET":
return render(request, "chat/messages.html",
{'users': User.objects.exclude(username=request.user.username),
'receiver': User.objects.get(id=receiver),
'messages': Message.objects.filter(sender_id=sender, receiver_id=receiver) |
Message.objects.filter(sender_id=receiver, receiver_id=sender)})
messages.html
{% extends 'chat/chat.html' %}
{% block messages %}
{% for message in messages %}
{% if message.sender == request.user %}
<div class="card-panel right" style="width: 75%; position: relative">
<div style="position: absolute; top: 0; left:3px; font-weight: bolder" class="title">You</div>
{{ message }}
</div>
{% else %}
<div class="card-panel left blue lighten-5" style="width: 75%; position: relative">
<div style="position: absolute; top: 0; left:3px; font-weight: bolder" class="title">{{ message.sender }}</div>
{{ message }}
</div>
{% endif %}
{% endfor %}
<script>
$(function () {
$('#user{{ receiver.id }}').addClass('active');
//Call receive function each 1 seconds to check for new messages in the database
setInterval(receive,1000)
})
</script>
{% endblock %}
models.py
class Message(models.Model):
id = models.AutoField(primary_key=True)
sender = models.ForeignKey(User, related_name='sender', on_delete=models.CASCADE)
receiver = models.ForeignKey(User, related_name='receiver', on_delete=models.CASCADE)
message = models.CharField(max_length=1500)
timestamp = models.DateTimeField(auto_now_add=True)
is_read = models.BooleanField(default=False)
def __str__(self):
return self.message
class Meta:
ordering = ('timestamp',)