Функциональность обмена сообщениями в почтовых ящиках Django не работаетPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Функциональность обмена сообщениями в почтовых ящиках Django не работает

Сообщение Anonymous »

Я пытаюсь добавить функциональность обмена сообщениями на мой веб-сайт электронной коммерции, где покупатели могут сообщать продавцам, а продавцы могут сообщать покупателям, как только покупатель что-то купит у них (еще не написал код для этого, просто хочу базовый функциональность обмена сообщениями). Вот что я пробовал. Через сообщение о сообщении_SELLER я могу напрямую сообщать об этом конкретном продавке, он приведет меня к почтовому ящику этого продавца, а user_messages_view похоже на почтовый ящик сообщений этого пользователя, отправленного и полученного, и пользователь может Выберите сообщение, чтобы открыть разговор. Именно тогда, когда пользователь получает сообщение, инициированное другим пользователем, в почтовом ящике показано неверное самоотверждение, а не фактическое сообщение. Несмотря на то, что счетчик непрочитанных сообщений правильно показывает нечитанные сообщения для этого пользователя. < /P> Как я могу решить проблему? /p>
class Business(models.Model):
BUSINESS_TYPE_CHOICES = [
('product', 'Product Business'),
('service', 'Service Business'),
]
seller = models.OneToOneField(CustomUser, on_delete=models.CASCADE, related_name='business')
business_name = models.CharField(max_length=100)
description = models.TextField()
business_slug = models.SlugField(unique=True, blank=True)
business_type = models.CharField(max_length=20, choices=BUSINESS_TYPE_CHOICES)
countries = models.ManyToManyField(Country)
states = models.ManyToManyField(State)
address = models.CharField(max_length=200)
phone = models.CharField(max_length=20)
website = models.URLField(blank=True, null=True)
email = models.EmailField(blank=True, null=True)
profile_picture = models.ImageField(upload_to='business_profiles/', blank=True, null=True)
banner_image = models.ImageField(upload_to='business_banners/', blank=True, null=True)
is_featured = models.BooleanField(default=False)

def __str__(self):
return self.business_name

def save(self, *args, **kwargs):
if not self.business_slug:
self.business_slug = slugify(self.business_name)
super().save(*args, **kwargs)

class Message(models.Model):
sender = models.ForeignKey(CustomUser, related_name='sent_messages', on_delete=models.CASCADE)
recipient = models.ForeignKey(CustomUser, related_name='received_messages', on_delete=models.CASCADE)
business = models.ForeignKey(Business, related_name='messages', on_delete=models.CASCADE, null=True)
content = models.TextField()
timestamp = models.DateTimeField(auto_now_add=True)
is_read = models.BooleanField(default=False)

def __str__(self):
return f'Message from {self.sender} to {self.recipient} in {self.business}'

< /code>
my views.py:
@login_required
def message_seller(request, business_slug):
business = get_object_or_404(Business, business_slug=business_slug)
if request.method == 'POST':
content = request.POST.get('content')
if content:
Message.objects.create(
sender=request.user,
recipient=business.seller,
business=business,
content=content
)
return redirect('message_seller', business_slug=business.business_slug)

# Mark messages as read for the current user and business
Message.objects.filter(recipient=request.user, business=business).update(is_read=True)

messages = Message.objects.filter(
Q(sender=request.user, recipient=business.seller) |
Q(sender=business.seller, recipient=request.user)
).filter(business=business).order_by('timestamp')

individual_business_message_counter = Message.objects.filter(recipient=request.user, business=business, is_read=False).count()
context = {
'business': business,
'messages': messages,
'individual_business_message_counter': individual_business_message_counter,
}
return render(request, 'business/message.html', context)

@login_required
def user_messages_view(request, business_slug=None):
# Fetch all businesses the user has interacted with
businesses = Business.objects.filter(
Q(messages__sender=request.user) | Q(messages__recipient=request.user)
).distinct()

user_messages = []
unread_businesses = set()

for business in businesses:
last_message = Message.objects.filter(
Q(sender=request.user, recipient=business.seller) |
Q(sender=business.seller, recipient=request.user)
).filter(business=business).order_by('-timestamp').first()

unread_count = Message.objects.filter(recipient=request.user, business=business, is_read=False).count()
if unread_count > 0:
unread_businesses.add(business)

user_messages.append({
'business': business,
'last_message': last_message,
'unread_count': unread_count,
})

unread_message_counter = len(unread_businesses)

if request.method == 'POST':
business_slug = request.POST.get('business_slug')
business = get_object_or_404(Business, business_slug=business_slug)
content = request.POST.get('content')
if content:
Message.objects.create(
sender=request.user,
recipient=business.seller,
business=business,
content=content
)
return redirect(f'{request.path}?business_slug={business.business_slug}')

selected_business = None
messages = []
business_slug = request.GET.get('business_slug')
if business_slug:
selected_business = get_object_or_404(Business, business_slug=business_slug)
messages = Message.objects.filter(
Q(sender=request.user, recipient=selected_business.seller, business=selected_business) |
Q(sender=selected_business.seller, recipient=request.user, business=selected_business)
).order_by('timestamp')

Message.objects.filter(recipient=request.user, business=selected_business).update(is_read=True)

context = {
'user_messages': user_messages,
'selected_business': selected_business,
'messages': messages,
'unread_message_counter': unread_message_counter,
}
return render(request, 'business/user_messages.html', context)
< /code>
my urls.py:
urlpatterns = [
path('message//', views.message_seller, name='message_seller'),
path('messages/', views.user_messages_view, name='user_messages'),
path('messages//', views.user_messages_view, name='user_messages_with_slug'),
]
< /code>
my message.html: < /p>


Messages





{% for message in user_messages %}

{{ individual_business_message_counter }}

Изображение

{{ message.business.business_name }}

{% if message.last_message %}
{% if not message.last_message.is_read %}
{{ message.last_message.content }}
{% else %}
{{ message.last_message.content }}

{% endif %}
{% else %}
No messages yet.
{% endif %}



{% endfor %}







Изображение

{{ business.business_name }}






{% for message in messages %}
{% if message.sender == request.user %}


Изображение
{{ message.timestamp }}


You
{{ message.content }}


{% else %}


Изображение
{{ message.timestamp }}


{{ business.business_name }}
{{ message.content }}


{% endif %}
{% endfor %}




{% if request.user.is_authenticated %}

{% csrf_token %}



Send



{% endif %}






< /code>
my user_messages.html: < /p>


Your Messages



{% for user_message in user_messages %}

{{ user_message.unread_count }}

Изображение

{{ user_message.business.business_name }}
{% if user_message.last_message %}
{{ user_message.last_message.content }}
{% else %}
No messages yet.
{% endif %}



{% endfor %}



{% if selected_business %}



Изображение

{{ selected_business.business_name }}



{% endif %}


{% for message in messages %}
{% if message.sender == request.user %}


Изображение
{{ message.timestamp }}


You
{{ message.content }}


{% else %}


Изображение
{{ message.timestamp }}


{{ selected_business.business_name }}
{{ message.content }}


{% endif %}
{% empty %}
No messages yet.
{% endfor %}


{% if request.user.is_authenticated and selected_business %}

{% csrf_token %}




Send



{% endif %}







Подробнее здесь: https://stackoverflow.com/questions/785 ... ot-working
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»