Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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 查询扩展用户模型返回错误_Python_Django_Django Models_Django Users - Fatal编程技术网

Python 查询扩展用户模型返回错误

Python 查询扩展用户模型返回错误,python,django,django-models,django-users,Python,Django,Django Models,Django Users,进行以下查询时,我收到一个错误: Election.objects.all().exclude(candidate__UserID=request.user).filter(Gender=request.user.Profile.Gender).filter(CandidateReg=True) 对于此模型: class Election(models.Model): Name = models.CharField(max_length=20) CandidateReg = m

进行以下查询时,我收到一个错误:

Election.objects.all().exclude(candidate__UserID=request.user).filter(Gender=request.user.Profile.Gender).filter(CandidateReg=True)
对于此模型:

class Election(models.Model):
    Name = models.CharField(max_length=20)
    CandidateReg = models.BooleanField(default=True)
    VotingOpen = models.BooleanField(default=False)
    Description = models.CharField(max_length=255, null=True, blank=True)
    GENDERS = (("M","Male"), ("F","Female"))
    Gender = models.CharField(max_length=1, choices=GENDERS, default="M")
    Seats = models.IntegerField(default=7)
    FlipGrid = models.URLField(null=True, blank=True)
    Complete = models.BooleanField(default=False)
此错误中描述了该问题:

Traceback (most recent call last):
      File "/home/elections/venv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
        response = get_response(request)
      File "/home/elections/venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response
        response = self.process_exception_by_middleware(e, request)
      File "/home/elections/venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response
        response = wrapped_callback(request, *callback_args, **callback_kwargs)
      File "/home/elections/elections-real/elections/views.py", line 139, in add_candidate
        elections = Election.objects.all().exclude(candidate__UserID=request.user).filter(Gender=request.user.Profile.Gender).filter(CandidateReg=True)
      File "/home/elections/venv/lib/python3.6/site-packages/django/utils/functional.py", line 239, in inner
        return func(self._wrapped, *args)
    AttributeError: 'User' object has no attribute 'Profile'
它似乎表明问题与当前用户配置文件中的
Gender
数据有关,这是用户模型的扩展。如下所示:

class Profile(models.Model):
    UserID = models.OneToOneField(User, on_delete=models.CASCADE)
    GENDERS = (("M","Male"), ("F","Female"))
    Gender = models.CharField(max_length=1, choices=GENDERS)
    UserTypeID = models.ForeignKey(UserType, on_delete=models.PROTECT, blank=True, null=True)
    EmailConfirmed = models.BooleanField(default=False)

@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(UserID=instance)

@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
    instance.profile.save()

如果不是上述方式,我如何正确引用登录用户配置文件的
性别属性?

一对一字段的反向访问器始终是模型的小写名称:因此它将是
请求.用户.配置文件…

如果您遵循标准的PEP-8兼容样式,并用小写字母命名所有字段-
gender
voting\u open
,您就不会感到惊讶了,
email\u confirated
等。还请注意,最好的做法不是给关系字段以
ID
结尾的名称,因为它们可以访问整个相关对象,而不仅仅是ID,因此您的
UserID
应该只调用
user


最后,关于性别,请阅读并考虑你是否真的需要问这个信息。< /P>什么是选举,它与个人简介有什么关系?我想确保返回的选举模型与用户的配置文件具有相同的性别值。为了更好地解释这一点,我对问题进行了编辑。非常感谢您的建议。这个解决方案已经奏效了,我肯定会使用更清晰的约定,正如你在将来所说的那样。