Django ListView类和基于URL Slug的多查询集

2024-10-04 09:21:59 发布

您现在位置:Python中文网/ 问答频道 /正文

使用django1.6,我有一个基于类的视图来查看日志。这样,我就有了两个不同的查询集…用于排序最早的日期和最近的日期。稍后我将添加更多的查询集。你知道吗

我该如何在url中放置一个slug,并让基于类的view ViewLog()获取该slug并基于它使用适当的查询集?你知道吗

而且,基于slug的if-then语句看起来很混乱,但是唯一的替代方法是让不同的url为特定的查询集调用不同的类……这看起来更混乱。你知道吗

    url(r'^log_view/(w+)$', ViewLog.as_view(),
        name = "log_view"),

你知道吗型号.py地址:

class LogMostRecent(models.Manager):
    def get_queryset(self):
        return super(Log, self).get_queryset().order_by("date_stamp")

class LogLeastRecent(models.Manager):
    def get_queryset(self):
        return super(Log, self).get_queryset().order_by("-date_stamp")

class Log(models.Model):
    IRC_MESSAGE_LENGTH = 512
    date_stamp = models.DateTimeField()
    irc_name = models.ForeignKey(Employee,
            related_name='irc_name_log')
    message = models.CharField(max_length=IRC_MESSAGE_LENGTH)

    objects = AddLogEntry()
    most_recent = LogMostRecent()
    least_recent = LogLeastRecent()

你知道吗视图.py地址:

class ViewLog(LoginRequiredMixin, ListView):
    template_name = "bot_data/log_view.html"
    model = Log

Tags: nameselflogview视图urlgetdate
2条回答

你知道吗网址.py你知道吗

url(r'^log/(?P<slug>[-_\w]+)/$', ViewLog.as_view(), name="log_name"),

你知道吗视图.py你知道吗

class ViewLog(LoginRequiredMixin, ListView):
    template_name = "bot_data/log_view.html"
    #model = Log
    #context_object_name = 'log_index'

def get_queryset(self):
    self.log = get_object_or_404(Log, slug=self.args[0])
    return Log.objects.filter(your_slug_in_model=self.log)

#def get_context_data(self, **kwargs):
    ...

最好的方法是从正在使用的slug中选择ListView的get_queryset中的queryset,这样就不会创建一大堆类似的视图,为每个视图指定一个queryset。你知道吗

相关问题 更多 >