如何在 Django 中只查询登录用户的字段?



所以我使用了一个模型,该模型链接到Django中的自定义用户(AbstractUser)。我想遍历当前登录用户属于他的所有对象。

所以这些是模型:

class CustomUser(AbstractUser):
# Define all the fields
company             = models.CharField(blank=True, null=True, max_length=150, unique=True)
email               = models.EmailField(blank=True, null=True)
username            = models.CharField(blank=True, null=True, max_length=150)
first_name          = models.CharField(blank=True, null=True, max_length=150)
last_name           = models.CharField(blank=True, null=True, max_length=150)
phone_number        = models.CharField(max_length=15, blank=True, null=True)
kvk_number          = models.IntegerField(blank=True, null=True)
vat_number          = models.CharField(blank=True, null=True, max_length=150)
customer_type       = models.CharField(max_length=1, choices=CUSTOMER_CHOICES, null=True, blank=True) # Choices are defined before the model
# Username is required here otherwise createsuperuser will throw a error. We define the usernamefield here as the email
REQUIRED_FIELDS = ['username', 'email']
USERNAME_FIELD = 'company'
def __str__(self):
return self.company
class UserLinks(models.Model):
# Define all the fields
user                = models.ForeignKey(CustomUser, on_delete=models.CASCADE, null=True, blank=True)
name                = models.CharField(max_length=2, choices=LINK_CHOICES, null=True, blank=True)
link                = models.URLField(blank=True, null=True)
login_name          = models.CharField(blank=True, null=True, max_length=150)
password            = models.CharField(blank=True, null=True, max_length=150)
def __str__(self):
return self.name
class Meta:
verbose_name = "User link"
verbose_name_plural = "User links"

这是我的观点:

def get(self, request):
user = CustomUser.objects.all()
return render(request, self.template_name ,{'user': user})

然后,当我想通过前键遍历对象时,我使用:

{% for entry in user %}
{{ entry.company  }}
{{ entry.first_name }}
{% for a in entry.userlinks_set.all %}
{{ a.name }}
{{ a.link }}
{% endfor %}
{% endfor %}

但是现在我正在显示所有对象,但我只想显示当前登录用户的对象,该怎么做?

您可以访问当前登录的用户:

request.user

尽管您应该考虑到,如果用户未登录,这将返回AnonymousUser。您可以通过使用login_required装饰器包裹视图来防止这种情况。

您可以通过以下方式更改视图代码:

def get(self, request):
return render(request, self.template_name ,{'user': request.user})

您的模板代码应如下所示

{{ user.company  }}
{{ user.first_name }}
{% for a in user.userlinks_set.all %}
{{ a.name }}
{{ a.link }}
{% endfor %}

您可以通过模板中的请求访问您的登录用户

{% if not request.user.is_anonymous %}
{{request.user.company}}
{{request.user.first_name}}
{% for link in request.user.userlinks_set.all %}
{{link.name}}
{{link.link}}
{% endfor %}
{% endif %}

最新更新