Django,从模型方法中过滤记录?

时间:2013-06-22 11:03:13

标签: django django-models django-views

我正在尝试使用模型方法过滤记录,但我不确定如何在视图中实现它。

应该以这种方式完成,还是完全在其他庄园的视野中完成?

以下是我的模型:

class Message(models.Model):
    msg_id = models.IntegerField(unique=True)
    user = models.ForeignKey(User)
    message = models.CharField(max_length=300)
    added = models.DateTimeField('added')

    def about_cats(self):
        matches = ['cat', 'kitty', 'meow']
        return any(s in self.message for s in matches)

    def __unicode__(self):
        return self.message

2 个答案:

答案 0 :(得分:2)

由于您需要过滤查询集对象,因此您可以在视图中执行以下操作:

from django.db.models import Q
matches = ['cat', 'kitty', 'meow']
messages = Message.objects.filter(reduce(operator.or_, (Q(message__contains=match) for match in matches)))  #Or use icontains if you want a case insensitive match. 

答案 1 :(得分:1)

过滤器应该是MessageManager的方法。见这里:https://docs.djangoproject.com/en/dev/topics/db/managers/