1

私はいくつかのモデルを持っていますが、すべての関連付けを作成する方法について少し混乱しています。プロフィール、イベント、メッセージ、受信トレイがあります。各プロファイルには、イベントを保持する 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)
4

1 に答える 1

0

これを常に発生させたい場合は、関連するコードをmessage.save()メソッドまたは保存後のシグナル ハンドラーに配置できます。このビューだけの場合は、そこにコードを配置できます。どちらの場合でも、これは機能するはずです:

# msg is the message instance
for box in inbox.objects.filter(user__eventList=msg.eid):
    box.message.add(msg)
于 2013-08-07T18:25:37.617 に答える