Моделирование механизма обмена сообщениями в Django
Используя отношения m2m (поле 'watchers') в моделях ниже и стандартную модель User, я могу отслеживать каждого пользователя, отслеживающего множество предметов, и, очевидно, я также могу составить список пользователей, отслеживающих определенный предмет.
Нужна помощь в моделировании события изменения цены товара(ов) при периодической почасовой проверке. Как мне составить список пользователей, каждый из которых будет получать электронное письмо, содержащее только те товары из его списка наблюдения, на которые изменилась цена?
Пока что после каждой проверки я могу составить список товаров, у которых изменился атрибут цены. Но как мне выяснить, какие из этих товаров должны быть в уведомлении (неважно, будет ли это электронная почта или что-то другое) для каждого пользователя? Нахожусь ли я на правильном пути с классом Notification или мне следует отказаться от него?
Спасибо!!!
class Notification(models.Model):
is_read = models.BooleanField(default=False)
message = models.TextField()
timestamp = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
class Item(models.Model) :
title = models.CharField(
max_length=200,
validators=[MinLengthValidator(2, "Title must be greater than 2 characters")]
)
current_price = models.DecimalField(max_digits=7, decimal_places=2, null=True)
last_price = models.DecimalField(max_digits=7, decimal_places=2, null=True)
lowest_price = models.DecimalField(max_digits=7, decimal_places=2, null=True)
description = models.TextField()
owner = models.ForeignKey(User, on_delete=models.CASCADE)
item_image = models.URLField(max_length=600, null=True)
item_url = models.URLField(max_length=600, null=True)
product_id = models.CharField (max_length=100, unique=True, null=True)
created_at = models.DateTimeField(auto_now_add=True, null=True)
updated_at = models.DateTimeField(auto_now=True, null=True)
watchers = models.ManyToManyField(User, related_name='items')
retailer = models.OneToOneField(Retailer, on_delete=models.CASCADE, null=True)
brand = models.CharField(max_length=200, null=True)
in_notification = models.ForeignKey(Notification, on_delete=models.CASCADE, null=True)
def __str__(self):
return self.title + "\n" + self.description ```