python - 如何在 Django 模型中使用查询?
问题描述
我有 2 个不同的 Django 模型 User_detials 和 Monthly_payment,现在我想让Status= Active、Expire、Soon Expire 或 Deactivated,在用户详细信息中我正在尝试这个但不能使用用户名和使用 2 个不同模型的不同字段来制作收到日期有什么解决办法??这是我的模型
class Client_Detials(models.Model, object):
First_name = models.CharField(max_length=100)
Last_name = models.CharField(max_length=100)
Address = models.CharField(max_length=100)
Contact_1 = models.CharField(max_length=100)
Contact_2 = models.CharField(max_length=100)
Email = models.EmailField()
Username = models.CharField(max_length=20)
Password = models.CharField(max_length=20)
cont_type = (
('Fiber', 'Fiber'),
('wireless', 'wireless'),
)
Connection_Type = models.CharField(choices=cont_type, max_length=12, default='Fiber')
Internet_Plan = models.ForeignKey(Nas_Package, on_delete=models.CASCADE)
Payment_Cycle = models.CharField(max_length=100, blank=True)
User_Img = models.ImageField(upload_to='Client', default='user.jpg', blank=True)
Created_by = models.OneToOneField(User, on_delete=models.CASCADE)
Created_Date = models.DateTimeField(auto_now=True)
def status(self):
recharge = recharge_monthly.username
if recharge == self.Username:
date_to_re = recharge_monthly.received_date
myd = datetime.datetime.now().date() - date_to_re
print(myd)
if myd.days < 20:
return "Active"
elif myd.days < 25:
return "Expire Soon"
elif myd.days <= 30:
return "Expire"
else:
return "Expire From {} day".format(30 - myd.days)
class recharge_monthly(models.Model):
username = models.ForeignKey(Client_Detials, on_delete=models.CASCADE)
Total_amount = models.FloatField()
Received_amount = models.FloatField(default=0.0)
received_date = models.DateField(auto_now_add=True)
is_vat_add = models.BooleanField()
is_tsc_add = models.BooleanField()
tsc_amount = models.FloatField()
vat_amount = models.FloatField()
解决方案
我可能是错的,但在我看来,您正试图在您的 Client_details 模型中访问相关的 charge_monthly 对象。如果这是您真正想要的,这就是解决方案。
我建议您在该username
字段中添加一个参数,例如:
class recharge_monthly(models.Model):
username = models.ForeignKey(Client_Detials, on_delete=models.CASCADE, related_name='recharges')
在此之后,您将能够访问父模型中的所有相关对象。然后,在def status()
:
@property
def status(self):
recharge = self.recharges.last()
date_to_re = recharge.received_date
myd = datetime.datetime.now().date() - date_to_re
if myd.days < 20:
return "Active"
elif myd.days < 25:
return "Expire Soon"
elif myd.days <= 30:
return "Expire"
else:
return "Expire From {} day".format(30 - myd.days)
在这里我们定义,在Client_Details
模型中我们将能够访问所有相关的recharge_monthly
对象。在status
函数中,我们获取最后创建的recharge_monthly
对象,并根据创建该对象的时间长短返回一个状态。装饰器使这个@property
函数像属性一样,这会很方便,因为status
函数现在成为我们可以找到对象状态真相的唯一地方。
我也不确定你是否确切地知道你在这里做什么,以及需要如何做。这部分代码可以做一些事情来使它工作一点,但我完全不确定这个问题是关于什么的。如果您向我解释更多,我会很高兴,这样我们就可以继续前进并选择正确的解决方案。
推荐阅读
- hyperledger-fabric - Hyperledger Fabric 中的对等通道创建失败
- react-native - 监视 this.state 以外的对象/字符串
- c++ - 具有多个可执行文件和依赖项的 Makefile
- javascript - D3 Persistent Path d 过渡期间的预期数字错误
- python - Python 机械化设置 cookie
- arrays - 为什么我的圈子显示为黑色?
- cordova - Cordova 找不到变量:NativeStorage
- php - 将货币选择器添加到 laravel
- reactjs - 在地图功能中渲染状态并添加一些样式反应js
- typescript - 为 TypeScript 使用 @Prop 装饰器 - 编译器在要求初始化 prop 时出错