对于这个问题,我很抱歉,但我对Django还是个新手,它让我摸不着头脑.我正在使用用户、课程(可授课的类型)等更新系统(如学校).我有来自遗留系统的课程,我希望将其引入新系统,并且我需要通过Legacy_User_id限制列表.到目前为止,我已经收到了这个 models.py

from account.models import Profile, LegacyUser

class OldClassesManager(models.Manager):
    def get_queryset(self):
        return super().get_queryset().filter(LegacyUser.legacy_id)

class OldInstructables(models.Model):
    legacy_user_id = models.IntegerField(null=False)
    name = models.CharField(max_length=100,  blank=False)
[other stuff]

    objects = models.Manager()
    SOMETHING = OldClassesManager()

    def __str__(self):
        return self.name


而这个是views.py美元

class OldClassList(ListView):
    model = OldInstructables

我想我的问题是我不知道我把SOMETHING块放在哪里.任何帮助或见解将不胜感激.

推荐答案

您不能在管理器中进行过滤,或者至少不能在没有带参数的方法的情况下进行过滤,因为模型(通常)是不知道请求的.

您可以使用以下选项在视图中进行过滤:

from django.contrib.auth.mixins import LoginRequiredMixin


class OldClassList(LoginRequiredMixin, ListView):
    model = OldInstructables

    def get_queryset(self):
        return (
            super().get_queryset().filter(legacy_user_id=self.request.user.legacy_id)
        )

Note:可以将视图限制为基于类的视图,只有经过身份验证的用户才能使用 LoginRequiredMixin mixin [Django-doc].


Note:在Django中,基于类的视图(CBV)通常有一个…View后缀,以避免与模型名称冲突. 因此,您可以考虑将视图类重命名为OldClassListView,而不是OldClassList.

Python相关问答推荐

X射线扫描显示Docker中的pip漏洞,尽管图像中未安装pip

无法获得指数曲线_fit来处理日期

Tokenizer Docker:无法为Tokenizer构建轮子,这是安装pyproject.toml项目所需的

在Python中使用readline函数时如何向下行

使用Python Great Expectations和python-oracledb

使用图片生成PDF Django rest框架

查找下一个值=实际值加上使用极点的50%

Python中的函数中是否有充分的理由接受float而不接受int?

仿制药的类型铸造

如何避免Chained when/then分配中的Mypy不兼容类型警告?

Pandas DataFrame中行之间的差异

Python+线程\TrocessPoolExecutor

如何根据一列的值有条件地 Select 前N个组,然后按两列分组?

改进大型数据集的框架性能

多处理队列在与Forking http.server一起使用时随机跳过项目

计算天数

如何使用Numpy. stracards重新编写滚动和?

如何在PySide/Qt QColumbnView中删除列

在Python中计算连续天数

在极中解析带有数字和SI前缀的字符串