如何将特定用户下的数据放入 Django 中的模板中

Posted

技术标签:

【中文标题】如何将特定用户下的数据放入 Django 中的模板中【英文标题】:How do I get data under a specific user into template in Django 【发布时间】:2020-06-07 09:53:18 【问题描述】:

我有一个非常简单的 Django 项目。我已经设置了登录并注册了,但我的一个问题是在 models.py 文件中看起来像这样:

from django.db import models
from django.contrib.auth.models import User

# Create your models here.
class ProductRecord(models.Model):
    product_name = models.CharField(max_length=30)
    quantity = models.IntegerField(default=1)

    print_process = models.CharField(max_length=100)
    finish = models.CharField(max_length=50)

    product_image = models.ImageField(upload_to='productImages', blank=True)
    def __str__(self):
        return self.product_name


class UserOrder(models.Model):
    product_name = models.CharField(max_length=30)
    quantity = models.IntegerField(default=0)

    url = models.URLField()
    reorder = models.BooleanField()

    def __str__(self):
        return self.product_name


class UserProfile(models.Model):
    users = models.OneToOneField(User, on_delete=models.CASCADE)

    social_site = models.URLField(blank=True)
    orders = models.ForeignKey(UserOrder, on_delete=models.CASCADE, default=3)

    def __str__(self):
        return self.users.username
















现在,我可以在管理员中下订单,然后在 UserProfiles 中将该订单分配给一个帐户,但是我如何让用户在登录后通过我的管理面板分配他们的订单?

【问题讨论】:

【参考方案1】:

检查是否user.is_authenticated。假设用户配置文件是在注册时自动创建的,请尝试以下操作:

编辑(试试这个,它会工作): 试试这个,将您的 UserOrders 模型更改为类似于此...

class UserOrder(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    product_name = models.CharField(max_length=30)
    quantity = models.IntegerField(default=0)
    url = models.URLField()
    reorder = models.BooleanField()

    def __str__(self):
        return self.product_name

您的个人资料模型与此类似:

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    social_site = models.URLField(blank=True)    

    def __str__(self):
        return self.users.username

那么,在你看来:

def your_view(request):
    if request.user.is_authenticated:
        profile = UserProfile.objects.get(user=request.user)
        orders = UserOrders.objects.filter(user=request.user)
    else:
        pass # or do something else
    return render(request, 'your_template.html', locals()) 

检查your_template.html是否有订单:

% if orders%
%for order in orders%
order.id <!-- or interpolate something else like product_name -->
%endfor %
%endif%

【讨论】:

orders = profile.orders 在我的代码示例中调用订单,您只需要在模板中调用新的orders 变量...所有这一切的更简单的方法是拥有一个名为 user 的字段在 UserOrder 表中,它是 Users 表的 ForeignKey。我认为它更直观,更容易使用 我认为如果您编辑您的问题以包含整个 UserProfile、UserOrders 模型、视图功能和相关模板部分,我们双方都会更容易......这样,它会更明确我们在讨论什么 我现在收到错误无法将关键字“用户”解析到字段中。选项有:id、orders、orders_id、social_site、users、users_id 尝试将profile = UserProfile.objects.get(user=request.user)更改为profile = UserProfile.objects.get(users=request.user) 像更新的答案一样修改模型。它应该工作

以上是关于如何将特定用户下的数据放入 Django 中的模板中的主要内容,如果未能解决你的问题,请参考以下文章

Django,将HTML放入模板时自动对HTML进行“清理”,如何阻止它?

如何从 django 模板中的 for 循环中获取特定的 id?

Django如何在查询集中标记用户特定的对象以发送到模板?

在模板Django中显示没有组的用户

如何在django创建模板中创建对象时自动插入当前用户?

如何过滤和统计 DJANGO 模板中的对象?