Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查询模型字段?在models.py中可能吗?_Python_Django - Fatal编程技术网

Python 查询模型字段?在models.py中可能吗?

Python 查询模型字段?在models.py中可能吗?,python,django,Python,Django,我有一个名为StudentProfile的模型: class StudentProfile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True) class_advisor = models.CharField(max_length=50) year = models.OneToOneField(YearLevel, on_delete=mo

我有一个名为
StudentProfile
的模型:

class StudentProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    class_advisor = models.CharField(max_length=50)
    year = models.OneToOneField(YearLevel, on_delete=models.SET_NULL, null=True)
    section = models.OneToOneField(Section, on_delete=models.SET_NULL, null=True)
我想做的是,
class\u advisor
只返回并使用
is\u teacher=True
访问
User

顺便说一下,这是我的
用户
型号:

class User(AbstractUser):
    email = models.EmailField(
        max_length=254,
        unique=True,
        verbose_name='Email Address',
        blank=True
    )
    is_student = models.BooleanField(default=False, verbose_name='Student')
    is_superuser = models.BooleanField(default=False, verbose_name='Administrator')
    is_teacher = models.BooleanField(default=False, verbose_name='Teacher')
    is_staff = models.BooleanField(default=False, verbose_name='Staff')
    is_registrar = models.BooleanField(default=False, verbose_name='Registrar')

试试这个:

StudentProfile.objects.filter(user\u为\u teacher=True)

尝试以下操作:


StudentProfile.objects.filter(user\u is\u teacher=True)

是的,但是目前,您的建模有问题。您应该将
class\u advisor
a
ForeignKey
设置为用户模型。假设您在模型中存储用户名(或该用户的任何唯一属性)。如果稍后该教师更改该用户名,则它将引用一个不存在的用户,或者稍后引用另一个选择该用户名的用户

您可以设置:

从django.db.models导入Q
从django.contrib.auth导入get\u user\u模型
班级学生档案(models.Model):
user=models.OneToOneField(获取\u user\u model(),在\u delete=models.CASCADE上,主键=True,相关的\u name='studentprofile')
class\u advisor=models.ForeignKey(get\u user\u model(),limit\u choices\u to=Q(is\u teacher=True),related\u name='students')
year=models.OneToOneField(YearLevel,on_delete=models.SET_NULL,NULL=True)
section=models.OneToOneField(section,on_delete=models.SET_NULL,NULL=True)
如果您使用表单等,它会将选项限制为教师用户,并对此进行验证


最好使用此处来指代您的用户模型,因为如果您以后对其进行更改,则
外键
(和
OneToOneField
将指代新模型)。

是的,但是目前,您的建模有问题。您应该将
class\u advisor
a
ForeignKey
设置为用户模型。假设您在模型中存储用户名(或该用户的任何唯一属性)。如果稍后该教师更改该用户名,则它将引用一个不存在的用户,或者稍后引用另一个选择该用户名的用户

您可以设置:

从django.db.models导入Q
从django.contrib.auth导入get\u user\u模型
班级学生档案(models.Model):
user=models.OneToOneField(获取\u user\u model(),在\u delete=models.CASCADE上,主键=True,相关的\u name='studentprofile')
class\u advisor=models.ForeignKey(get\u user\u model(),limit\u choices\u to=Q(is\u teacher=True),related\u name='students')
year=models.OneToOneField(YearLevel,on_delete=models.SET_NULL,NULL=True)
section=models.OneToOneField(section,on_delete=models.SET_NULL,NULL=True)
如果您使用表单等,它会将选项限制为教师用户,并对此进行验证



最好使用此处来指代您的用户模型,因为如果您以后更改它,则
外键
(和
OneToOneField
将指代新模型)。

好的,那么我将把它放在哪里?应该是这样吗
class\u advisor=StudentProfile.objects.filter(user\u is\u teacher=True)
?您可以在视图中查询它。Willem Van Onsem的答案对我很有用。无论如何,谢谢你。我真的很感激!好吧,我要把它放在哪里?应该是这样吗
class\u advisor=StudentProfile.objects.filter(user\u is\u teacher=True)
?您可以在视图中查询它。Willem Van Onsem的答案对我很有用。无论如何,谢谢你。我真的很感激!我看到同一个问题两次由同一个用户编写,请具体到问题。你的问题应该描述这个问题,你应该展示一些你最不努力的地方。我看到同一个用户写了两次同样的问题,请针对这个问题。你的问题应该描述问题,你应该展示一些你最不努力的地方。嗨,先生,对不起,我对django很陌生,所以,应该是这样:
class\u advisor=StudentProfile.objects.filter(user\u is\u teacher=True)。value('class\u advisor')
?@newbieprogrammer你不会得到一个class\u advisor,结果会有很多顾问。威廉·范·昂森的回答对我很有用。无论如何,谢谢你。我真的很感激!嗨,先生,对不起,我对django真的很陌生,所以,如果是这样:
class\u advisor=StudentProfile.objects.filter(user\u is\u teacher=True)。value('class\u advisor')
?@newbieprogrammer你不会得到一个class\u advisor,结果会是很多个advisor。Willem Van Onsem的答案对我来说很有用。无论如何,谢谢你。我真的很感激!您好,先生,谢谢您的帮助,但我收到一个错误::(admin.E202)“student_dashboard.StudentProfile”有多个指向“accounts.User”的外键。student_dashboard.StudentProfile.class_advisor:(fields.E305)“StudentProfile.class_advisor”的反向查询名称与“StudentProfile.user”的反向查询名称冲突。提示:在“StudentProfile.class\u advisor”或“StudentProfile.user”的定义中添加或更改相关的\u name参数。@newbieprogrammer:yes,你需要添加额外的
related\u name
soh好的,所以当我添加
related\u name
参数时,我在/admin/student\u dashboard/studentprofile/中发现了另一个错误
操作错误,没有这样的列:student\u dashboard\u studentprofile.class\u advisor\u id
我现在真的不知道该怎么办,谢谢你的帮助我为这个做了另一个模型?谢谢老兄!成功了!我真的很感激!您好,先生,谢谢您的帮助,但我收到一个错误::(admin.E202)“student_dashboard.StudentProfile”有多个指向“accounts.User”的外键。student_dashboard.StudentProfile.class_advisor:(fields.E305)“StudentProfile.class_advisor”的反向查询名称与“StudentProfile.user”的反向查询名称冲突。提示:在“StudentProfile.class\u advisor”或“StudentProfile.user”的定义中添加或更改相关的\u name参数。@newbieprogrammer:是的,您需要添加额外的
相关的\u name
soh ok s
StudentProfile.objects.filter(user__is_teacher=True).values('class_advisor')
from django.db.models import Q
from django.contrib.auth import get_user_model

class StudentProfile(models.Model):
    user = models.OneToOneField(get_user_model(), on_delete=models.CASCADE, primary_key=True, related_name='studentprofile')
    class_advisor = models.ForeignKey(get_user_model(), limit_choices_to=Q(is_teacher=True), related_name='students')
    year = models.OneToOneField(YearLevel, on_delete=models.SET_NULL, null=True)
    section = models.OneToOneField(Section, on_delete=models.SET_NULL, null=True)