【问题标题】:Django - Select only specific rows from a queryDjango - 从查询中只选择特定的行
【发布时间】:2018-02-21 21:54:13
【问题描述】:

我已经开始学习 django,作为我的第一个项目,我正在尝试创建一个目录。

我创建了 3 个表

  1. 学生

  2. 目录

  3. 这两个之间的链接表

这就是我的 models.py 的样子:

class Catalog(models.Model):
    Class = models.CharField(max_length =30)

    def __str__(self):
        return str(self.Class)


class StudentiAn4(models.Model):
    Username = models.ForeignKey(User)
    FirstName = models.CharField(max_length=50)
    LastName = models.CharField(max_length=50)
    Group = models.CharField(max_length=4)

    def __str__(self):
        return str(self.Username) + ' ' + self.FirstName +' ' + self.LastName


class CatalogStudenti(models.Model):
    catalog = models.ForeignKey(Catalog)
    student = models.ForeignKey(StudentiAn4)
    grade = models.IntegerField()

    def __str__(self):
        return str(self.catalog) +' ' + str(self.student)

在视图中:

def studenti(request):
    query = CatalogStudenti.objects.all()
    return render(request, 'users/Studenti.html',{'query': query})

作为登录用户(用户名:1​​23,名字:test1,姓氏:test1_LN),我只想查看分配给我的成绩,而不是所有成绩。 你能告诉我如何过滤输出,以便我只看到分配给我的成绩吗?

当前输出:

123 test1 test1_LN - SEP 5
234 test2 test2_LN - ASC 4
123 test1 test1_LN - AACEP 6

期望的输出:

123 test1 test1_LN - SEP 5
123 test1 test1_LN - AACEP 6

【问题讨论】:

  • 我建议将所有模型字段名称更改为小写,特别是因为您目前有混合样式。

标签: django


【解决方案1】:

更改视图函数中的查询集以按学生的用户字段进行过滤:

query = CatalogStudenti.objects.filter('student__Username'=request.user)

【讨论】:

  • 这不取决于User 模型上的__str__ 方法是否实际返回username
  • Username 他的代码中的字段只是ForeignKeyFieldUser 模型。它与实际用户名无关。
  • 是的,我的错,由于命名有些奇怪,我错过了它。 @flama,将StudentiAn4.Username 字段更改为StudentiAn4.User(和小写)可能是一个更好的主意,因为它指向实际的User 模型,而不是username
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
  • 2021-11-25
  • 2014-11-28
  • 2017-07-26
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
相关资源
最近更新 更多