将消息放入收件箱(Django模型)

时间:2013-08-07 17:55:34

标签: django django-models django-views

我有几个模型,对于如何创建所有关联有点困惑。我有个人资料,事件,消息和收件箱。每个配置文件都有一个保存事件的eventList。每条消息也与一个事件相关联。每个收件箱都与个人资料和多条消息相关联。我想要做的是,无论何时创建消息对象,都要将其插入到每个用户的收件箱中,该用户在其eventList中保存与消息关联的事件。提供我的模型和我写的观点:

class Profile(models.Model):
    user = models.OneToOneField(User)
    name = models.CharField(max_length=50)
    eventList = models.ManyToManyField(Event, blank="TRUE", null="TRUE", related_name='event_set+')
    ownedEvent = models.ManyToManyField(Event, blank="TRUE", null="TRUE", related_name='owned_set')
    def __unicode__(self):
            return self.name

class inbox(models.Model):
    def __unicode__(self):
        return self.user.name
    user = models.OneToOneField(Profile)
    message = models.ManyToManyField(message, blank="TRUE", null="TRUE")
    read = models.BooleanField(default = 0)

class message(models.Model):
    def __unicode__(self):
        return unicode(self.body)
    def save(self, *args, **kwargs):
        if not self.id:
            self.created = datetime.datetime.today()
        super(message, self).save(*args, **kwargs)
    body = models.CharField(max_length=250)
    eid = models.ForeignKey(Event)


@login_required
def sendMail(request):

    event_id = request.POST['event_id']
    e = Event.objects.get(id = event_id)
    text = request.POST['body']

    m = message(eid = e, body = text)
    m.save()

    users = e.eventList_set.all()

    return HttpResponse(status = 200)

1 个答案:

答案 0 :(得分:0)

如果您希望始终发生这种情况,可以将相关代码放在message.save()方法或保存后信号处理程序中。如果只是为了这个视图,那么你可以把代码放在那里。在任何一种情况下,这应该有效:

# msg is the message instance
for box in inbox.objects.filter(user__eventList=msg.eid):
    box.message.add(msg)