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

如何在Django中只查询登录用户的字段?,django,django-models,django-templates,Django,Django Models,Django Templates,因此,我使用了一个模型,该模型链接到Django中的自定义用户AbstractUser。我想循环当前登录用户属于他的所有对象 以下是模型: class CustomUser(AbstractUser): # Define all the fields company = models.CharField(blank=True, null=True, max_length=150, unique=True) email =

因此,我使用了一个模型,该模型链接到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})
然后,当我想通过foreingkey循环对象时,我使用:

{% 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。您可以通过使用登录所需的装饰器包装视图来防止这种情况

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

def getself,请求: 返回renderrequest,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 %}

非常感谢您的帮助:有什么更好的方法可以做到这一点?请求用户或定义在其中请求用户的视图。或者根本没有区别?这是另一种方式。