【问题标题】:Don't want show all items of a model object in django不想在 django 中显示模型对象的所有项目
【发布时间】:2012-11-28 06:48:09
【问题描述】:
class TaskManager(models.Manager):
    def get_query_set(self):
         return super(TaskManager, self).get_query_set().filter(Owner='jim')

class Task(models.Model):
    Name = models.CharField('Title', max_length=200)
    Notes = models.TextField('Description',max_length=2000, null=True)
    project = models.ForeignKey(Project,null=True, blank=True)
    Owner = models.CharField(max_length=100, choices=owner_set)

    objects =  TaskManager()
    def __unicode__(self):
    return self.Name

我的 models.py 中有两个模型,每个任务都有一个项目。但是当我进入任务页面时,它会默认列出所有任务。所以我希望它只列出当前用户的任务by default。就是Task.Owner=当前用户。 谁能帮帮我,谢谢!

我从网上搜索了一下,得到了解决方法: 我更新了刚刚粘贴在上面的代码。 谢谢大家。

【问题讨论】:

  • 你能发布你的 urls.py 文件吗?
  • “任务页面”是你定义的视图吗?

标签: python django


【解决方案1】:

为什么不这样做!

Task.objects.filter(owner = current_user)

更新:

1) 如果您想过滤您自己的自定义模板,请将其添加到您的视图代码中

2) 如果您尝试自定义管理站点,请执行此操作,

from django.contrib import admin
from models import MyModel

class TaskAdmin(admin.ModelAdmin): 

    def queryset(self, request): 
        return super(TaskAdmin, self).queryset(request).filter(owner = request.user)

admin.site.register(Task, TaskAdmin)

【讨论】:

  • 如果你有一个自定义视图,你必须把它放在那里
  • 如果我没有自定义视图,我不能设置过滤器?
  • 在渲染任务页面的视图中输入代码,并将过滤后的任务作为上下文发送到模板。
  • 感谢 Raunak,这正是我想要的
【解决方案2】:

您应该在 ModelAdmin 类中添加:

class TaskAdmin(...):

    def queryset(self, request):
         qs = super(TaskAdmin, self).queryset(request)
         return qs.filter(Owner=request.user)

这将覆盖默认查询集

更多: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.queryset

【讨论】:

  • 点击过滤,可以在html模板中配置。如果这是您唯一的问题,您应该使用管理员 :)
【解决方案3】:

我只是想修改一个模型的默认过滤器,让模型列表不是所有没有modelAdmin的项目,因为modelAdmin只是提供了一个需要手动点击的过滤器,我想默认自动过滤模型

【讨论】:

  • 如果您有其他信息,应将其添加为原始帖子的编辑或评论,而不是作为答案!
  • 对不起,我不熟悉这个论坛的规则
猜你喜欢
  • 1970-01-01
  • 2014-06-18
  • 2017-02-15
  • 1970-01-01
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
  • 2013-04-27
相关资源
最近更新 更多