django - 无法在 django 中查询特定的“用户订阅”
问题描述
我正在创建一个 django 电子商务网站;该网站“销售”数字商品。我无法获取特定的“用户订阅”,这意味着用户购买了此数字商品,我想在模板中显示它。在这种情况下,我有兴趣在模板中为特定用户显示“plan_name”(来自订阅模型)、“created_date”和“expiry_date”,但不知何故我无法做到。代码如下:
模型.py
class Subscription(models.Model):
plan_name = models.CharField(max_length=50, null=True, blank=True, verbose_name="Subscription Plan Name")
description = models.TextField(verbose_name="Subscription Plan Description")
price = models.FloatField(verbose_name="Subscription Plan Price")
start_date = models.DateTimeField(auto_now=False, auto_now_add=False, verbose_name="Subscription Plan Start Date")
end_date = models.DateTimeField(auto_now=False, auto_now_add=False, verbose_name="Subscription Plan End Date")
active = models.BooleanField(default=False)
class Meta:
verbose_name = "Subscription"
verbose_name_plural = "Subscriptions"
def __str__(self):
"""Unicode representation of Subscription"""
return " Subscription type: {}, Description: {}, Price: {}, Is active: {}".format(
self.plan_name,
self.description,
self.price,
self.active
)
class UserSubscription(models.Model):
user = models.ForeignKey(User, related_name= 'tosubscriptions', on_delete=models.CASCADE, null=True, blank=True)
subscription = models.ForeignKey("Subscription", related_name = 'tosubscriptions',on_delete=models.CASCADE, null=True, blank=True)
created_date = models.DateTimeField(auto_now_add=True, verbose_name="Created Date")
expiry_date = models.DateTimeField(auto_now=False, auto_now_add=False, verbose_name="Expiry Date")
is_canceled = models.BooleanField(default=False, verbose_name="Is Canceled")
cancel_date = models.DateTimeField(auto_now=False, auto_now_add=False, blank=True, null=True)
class Meta:
verbose_name = "User Subscription"
verbose_name_plural = "User Subscriptions"
def __str__(self):
"""Unicode representation of UserSubscription"""
return "PK: [{}] Subscription of: {}, Subscription type: {}, Expiring the: {}".format(
str(self.pk),
str(self.user),
str(self.subscription),
str(self.expiry_date)
)
视图.py
class MyProfileView(LoginRequiredMixin, ListView):
template_name = 'myprofile.html'
model = UserSubscription
def get_context_data(self, *args, **kwargs):
context = super().get_context_data()
context['usersubscription'] = UserSubscription.objects.filter(user=self.request.user)
return context
模板
{% extends 'base.html' %}
{% block title %}
My Profile
{% endblock %}
{% block content %}
<p>Username: {{user.username}}</p>
<p>First Name: {{user.first_name}}</p>
<p>Last Name: {{user.last_name}}</p>
<p>Birth Date: {{user.userprofile.birth_date}}</p>
<p>Email: {{user.email}}</p>
<p>Language: {{user.userprofile.language}}</p>
<p>Address: {{user.userprofile.address}}</p>
<p>Postal Code: {{user.userprofile.postal_code}}</p>
<p>Country: {{user.userprofile.country}}</p>
<a href="{% url 'updatemyprofile' %}">Update My Profile</a>
<hr>
<p>My Current Plan:{{usersubscription.subscription.plan_name}}</p>
<p>Start Date: {{usersubscription.created_date}}</p>
<p>End Date: {{usersubscription.expiry_date}}</p>
<a href="{% url 'home' %}">Renew my Subscription</a>
<hr>
<p>My Bills:</p>
<p>Bill 1: {{usersubscription.subscription.price}} €</p>
{% endblock %}
结果:
用户名:foo
名字:foo
姓名:酒吧
出生日期:2020年2月2日
邮箱:foo@bar.com
语言:EN
地址:富吧大道
邮政编码:1000
国家:美国
更新我的个人资料
我目前的计划:
开始日期:
结束日期:
续订我的订阅
任何帮助,将不胜感激
解决方案
你有一个查询集没有一个UserSubscription
。尝试
UserSubscription.objects.filter(user=self.request.user).first()
它只需要第一次订阅,或者更改您如何为您的目的获取特定订阅的逻辑。
推荐阅读
- oauth-2.0 - 使用访问令牌在联合中的两个身份提供者之间获取授权码
- android - 如何在 React Native 应用程序中保护捕获或下载的媒体文件
- docker - 激活器清理编译阶段未在 docker 中完成
- python - AWS Lambda:使用容器映像但仍然找不到程序路径
- javascript - 带有内联芯片和文本的自定义输入元素
- python - 为什么我的 Discord 机器人一直收到“错误 1:无效的 appid”,用于回答来自 wolfram alpha 的查询?
- file-upload - 无法发布带有已上传到 Linkedin 的图片的文章
- ruby-on-rails - NoMethodError(nil:NilClass 的未定义方法“上传”):
- ruby-on-rails - 我可以模拟通常在 docker 上运行的数据库调用吗
- python - 通过迭代列表(Python)替换(部分)字符串的问题