如何在 Django 模型中获取用户 ID?

how to get users id in django model?

我需要从登录用户获取 ID 以在 models.how 中过滤查询以获取 Django 模型中的用户 ID? 谢谢

models.py中:

class Portfo(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE, null=True)
    sell = models.ForeignKey(Sell, on_delete=models.CASCADE, null=True)
    customer = models.ForeignKey(Customer, on_delete=models.CASCADE, null=True)
    profit = models.PositiveIntegerField(null=True)
    final_amount = models.IntegerField(null=True)

    def __str__(self):
        return self.product.name

    def final_amount(self):
        final_amount = 0
        buy = Buy.objects.filter(product_id=self.product.id, owner__exact=...)
        sell = Sell.objects.filter(product_id=self.product.id)

I need to get id from logged user to filter query in models.

模型设计为 request-unaware。如果要检索用户id,则需要通过参数传递它,因此:

class Portfo(models.Model):
    # …

    def final_amount(self<strong>, user_id</strong>):
        final_amount = 0
        buy = Buy.objects.filter(product_id=self.product_id<strong>, owner_id=user_id</strong>)
        sell = Sell.objects.filter(product_id=self.product_id<strong>, owner_id=user_id</strong>)
        # …

在视图中,您可以使用 .final_amount(…) 方法,例如:

from django.contrib.auth.decorators import login_required
from django.shortcuts import get_object_or_404

@login_required
def some_view(request, pk):
    my_porfolio = get_object_or_404(Portfolio, pk=pk)
    final_amount = my_portfolio.final_amount(<strong>request.user.id</strong>)
    # …