【问题标题】:Querying related model-attributes in django在 django 中查询相关的模型属性
【发布时间】:2021-01-27 04:17:00
【问题描述】:

我有以下自定义用户模型排列。

```
class User(AbstractUser):
    is_student = models.BooleanField(default=False)
    is_teacher = models.BooleanField(default=False)

class StudentProfile(models.Model):
    student = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    location = models.CharField(max_length=8, blank=False, default='')
class TeacherProfile(models.Model):
    teacher = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    location = models.CharField(max_length=8, blank=False, default='')
    gender = models.CharField(max_length=8, choices=GENDER_CHOICES, default='')

```

我可以根据老师(当前​​用户)的位置来查询学生。

Student.objects.filter(location=request.user.teacher.location)

我还可以查询用户模型并查找所有教师/学生

    User.objects.filter(is_teacher=True)

问题: 在不依赖个人资料模型(学生和教师)的情况下,如何使用个人资料属性扩展对 abstractuser 的查询。

[X]-这是错误的,但想法是这样的;

    User.objects.filter(is_teacher=True).filter(is_teacher.location=newyork)

【问题讨论】:

  • 您的TeacherProfile 似乎没有location 字段?
  • 道歉。位置字段类似于 studentprofile 中的字段

标签: python django modelattribute


【解决方案1】:

您可以反向关注OneToOneField

User.objects.filter(<b>teacherprofile__location='newyork'</b>)

因此您不需要显式存储is_teacheris_student。您可以简单地过滤Students:

# Users with a related StudentProfile record
User.objects.filter(studentprofile__isnull=False)

【讨论】:

    猜你喜欢
    • 2019-08-28
    • 2018-09-13
    • 1970-01-01
    • 2020-12-21
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 2014-02-21
    相关资源
    最近更新 更多