如何将特定用户下的数据放入 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进行“清理”,如何阻止它?