用户历史记录操作 - 存储在django模型中的正确方法

时间:2014-04-12 17:47:15

标签: django django-models models

我的用户是可以采取行动的雇主,例如向候选人发送消息,与其他人分享他们的简历以及撰写关于候选人的评论。

为此,我创建了3个单独的模型,每个模型一个:

class Share(models.Model):
    user          = models.ForeignKey(BatitoUser, related_name="shares")
    shared_user   = models.ForeignKey(BatitoUser, blank=True)
    to_email      = models.EmailField()
    message       = models.TextField(blank=True)
    date          = models.DateTimeField(auto_now_add=True)

    def __unicode__(self):
        return '%s - %s' % (self.user, self.to_email)

class Review(models.Model):
   user    = models.ForeignKey(BatitoUser)
   to_user = models.ForeignKey(BatitoUser, related_name='reviews')
   review  = models.TextField(blank=True)
   rating  = models.DecimalField(max_digits=2, decimal_places=1, blank=True)
   date    = models.DateField(auto_now=True)

   def __unicode__(self):
        return '%s - %s' % (self.user, self.to_user)**

class MessageSent(models.Model):
     user    = models.ForeignKey(BatitoUser, related_name="messages")
     to_user = models.ForeignKey(BatitoUser)
     message = models.TextField()
     date = models.DateTimeField(auto_now_add=True)

     def __unicode__(self):
         return '%s - %s' % (self.user, self.to_user)

我希望能够列出所有雇主的历史记录。 这样做的最佳方式是什么?

我在考虑两个选项:

  1. 从每个模型中检索相关信息到模板中(user.reviews_set.all,user.share_set.all等等)然后通过jquery / javascript按日期对它们进行排序。

    < / LI>
  2. 创建另一个包含所有用户操作的历史记录模型。但我不确定该怎么做......

  3. 我将不胜感激。

2 个答案:

答案 0 :(得分:0)

只是一个快速而肮脏的想法:所有模型都有很多共同之处。您可以通过models.Message.objects.all()

对基本模型(Message)进行子类化并检索简单的历史记录(即没有来自共享和评论的分离消息)。
class Message(models.Model):
    user          = models.ForeignKey(BatitoUser)
    to_user       = models.ForeignKey(BatitoUser, blank=True)
    message       = models.TextField(blank=True)
    date          = models.DateTimeField(auto_now_add=True)

     def __unicode__(self):
         return '%s - %s' % (self.user, self.to_user)

class Share(Action):
    to_email      = models.EmailField()

    def __unicode__(self):
        return '%s - %s' % (self.user, self.to_email)

class Review(models.Model):
   rating  = models.DecimalField(max_digits=2, decimal_places=1, blank=True)

还有一个问题是,是否有相同的快速和脏的方式来按历史记录类型分隔邮件

答案 1 :(得分:0)

你可以从django的管理日志from django.contrib.admin.models import LogEntry中获得灵感,或者如果它符合你的要求就可以使用它。 Checkout this