如何 select 视图中 QuerySet 的 OnetoOne 字段?
How to select a OnetoOne field from a QuerySet in a view?
查看所有用户(未启用 search_hidden)视图
@login_required
def users(request):
"""List all users page"""
t_users = User.objects.all()
users = t_users.usersettings.filter(search_hidden=False).select_related('user')
context = {'users': users}
return render(request, 'users/users.html', context)
用户设置模型
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
class UserSettings(models.Model):
"""Stores the user's settings."""
user = models.OneToOneField(User, related_name='usersettings', on_delete=models.CASCADE)
public_profile = models.BooleanField(default=True)
search_hidden = models.BooleanField(default=False)
class Meta:
verbose_name_plural = 'usersettings'
def __str__(self):
return f"{self.user}'s settings"
@receiver(post_save, sender=User)
def create_user_usersettings(sender, instance, created, **kwargs):
if created:
UserSettings.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_usersettings(sender, instance, **kwargs):
instance.usersettings.save()
所有用户在创建帐户时都绑定了一个 UserSettings 模型。在我看来,我想 select 所有已禁用 search_hidden 的用户,但是我尝试过的并没有 work.The 错误 'QuerySet' object has no attribute 'usersettings'
在请求页面时显示.我可能需要 select 每个用户并检索设置,但我不知道如何有效地做到这一点。
iliya 评论说使用 t_users.objects.filter(search_hidden=False)
过滤会 return 用户,其中 search_hidden 在他们的设置对象中不正确。
查看所有用户(未启用 search_hidden)视图
@login_required
def users(request):
"""List all users page"""
t_users = User.objects.all()
users = t_users.usersettings.filter(search_hidden=False).select_related('user')
context = {'users': users}
return render(request, 'users/users.html', context)
用户设置模型
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
class UserSettings(models.Model):
"""Stores the user's settings."""
user = models.OneToOneField(User, related_name='usersettings', on_delete=models.CASCADE)
public_profile = models.BooleanField(default=True)
search_hidden = models.BooleanField(default=False)
class Meta:
verbose_name_plural = 'usersettings'
def __str__(self):
return f"{self.user}'s settings"
@receiver(post_save, sender=User)
def create_user_usersettings(sender, instance, created, **kwargs):
if created:
UserSettings.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_usersettings(sender, instance, **kwargs):
instance.usersettings.save()
所有用户在创建帐户时都绑定了一个 UserSettings 模型。在我看来,我想 select 所有已禁用 search_hidden 的用户,但是我尝试过的并没有 work.The 错误 'QuerySet' object has no attribute 'usersettings'
在请求页面时显示.我可能需要 select 每个用户并检索设置,但我不知道如何有效地做到这一点。
iliya 评论说使用 t_users.objects.filter(search_hidden=False)
过滤会 return 用户,其中 search_hidden 在他们的设置对象中不正确。