向多个用户发送消息

时间:2014-11-18 20:59:40

标签: python django django-forms

我是模特UserPhoneNumber。我想向multiple phone numbers发送消息。 我已将ForeignKey应用于to_number而非M2M,因为我想跟踪每个电话号码。比如,此消息是delivered or not

如何向多个用户发送消息?我应该使用inline-formset吗?或任何其他想法?或批量创建

class UserCellPhone(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL)
    cell_number = models.CharField(max_length=15, unique=True)

class SentMessage(models.Model):
    to_number = models.ForeignKey(UserCellPhone)

    account_sid = models.CharField(max_length=34, default="", blank=True)

    body = models.TextField(max_length=160, default="", blank=True)

    sent_at = models.DateTimeField(null=True, blank=True)
    delivered_at = models.DateTimeField(null=True, blank=True)
    status = models.CharField(max_length=20, default="", blank=True)

1 个答案:

答案 0 :(得分:1)

据我了解,您似乎误解了M2M的运作方式。

在您的情况下,似乎可以将消息发送到许多号码。一个号码可以接收很多消息 - >您需要许多 2 许多关系。没有其他解决方案。

在“概念方式”(在Django中),当您设计M2M关系时,您定义了2个模型(UserCellPhoneSentMessage),但实际上(即,在数据库级别发生了什么) ),将涉及3个表,因为Django将创建一个表,将您的两个模型与M2M关系链接。

如果你想指定与Django一起使用的第三个表,你可以这样做,使用你的例子:

class UserCellPhone(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL)

class SentMessage(models.Model):
    to_number = models. ManyToManyField(UserCellPhone, through='MessagesDelivery')

这样,Django将创建3个表,MessagesDelivery表将包含具有FK到UserCellPhone + FK到SentMessage的夫妇。

例如,如果message_38发送到usercellphone_45和usercellphone_67,则MessagesDelivery表将如下所示:

-- sent_message_id - usercellphone_id 
-- 38 - 45
-- 38 - 67

这就是M2M关系的工作方式(不仅仅是在Django中)。