我的django应用程序具有send_sms
功能,我也希望具有自动短信auto_sms
功能。当我的数据模型满足条件时。
@ views.py
def send_sms(request):
z = Rainfall.objects.latest('timestamp')
numbers = Mobile.objects.all()
message = ('Test Message')
account_sid = '**************'
auth_token = '**************'
client = Client(account_sid, auth_token)
for i in numbers:
client.messages.create(to=i.mobile_number,
from_='**************',
body=message)
return HttpResponseRedirect('/success/', 200)
def auto_sms(request):
responses = Rainfall.objects.filter(
level='Torrential' or 'Intense',
timestamp__gt=now() - timedelta(days=1),
sms_sent=False,
)
if responses.count() >= 10:
send_sms(request)
responses.update(sms_sent=True)
@ models.py
class Rainfall(models.Model):
level = models.CharField(max_length=10, blank=True, default='')
amount = models.FloatField()
timestamp = models.DateTimeField(auto_now_add=True)
现在,我正在测试它,当auto_sms
在一天之内检测到数据库中有多个(10)个“ Torrential或Intense”条目时。它必须自动执行send_sms
,但返回错误:
Cannot resolve keyword 'sms_sent' into field. Choices are: amount, id, level, timestamp
我在这里想念什么?请帮忙。谢谢!
答案 0 :(得分:0)
您的Rainfall
类中没有名为sms_sent
的字段-请考虑添加该字段或更改您的查询:
class Rainfall(models.Model):
...
sms_sent = models.BooleanField(default=False) # add this field
# override save method:
def save(self, *args, **kwargs):
if <some conditions are met>:
# send sms:
self.send_sms()
self.sms_sent = True
super(Rainfall, self).save(*args, **kwargs)
答案 1 :(得分:0)
UPDATE
你好
我的降雨模型实际上看起来像这样。抱歉,我现在将详细介绍。
@ models.py
class Rainfall(models.Model):
level = models.CharField(max_length=10, blank=True, default='')
amount = models.FloatField()
timestamp = models.DateTimeField(auto_now_add=True)
def update_level(self):
if 0.1 <= self.amount < 2.5:
return 'Light'
elif 2.5 <= self.amount < 7.5:
return 'Moderate'
elif 7.5 < self.amount < 15:
return 'Heavy'
elif 15 <= self.amount < 30:
return 'Intense'
elif 30 <= self.amount < 50:
return 'Torrential'
def save(self, *args, **kwargs):
if not self.level:
self.level = self.update_level()
super().save(*args, **kwargs)
class Sms(models.Model):
description = models.CharField(max_length=100, blank=True)
timestamp = models.DateTimeField(auto_now_add=True)
和我的views.py看起来像这样。
def send_sms(request):
z = Rainfall.objects.latest('timestamp')
numbers = Mobile.objects.all()
message = (f'Test ({z.timestamp})')
account_sid = '*******'
auth_token = '********'
client = Client(account_sid, auth_token)
for i in numbers:
client.messages.create(to=i.mobile_number,
from_='********',
body=message)
record = Sms.objects.create(description=f'{message}')
record.save()
return HttpResponseRedirect('/api/', 200)
def auto_sms(request):
responses = Rainfall.objects.filter(
level='Torrential' or 'Intense',
timestamp__gt=now() - timedelta(days=1),
)
if responses.count() >= 5:
send_sms(request)
return HttpResponse(200)
现在我无法在降雨量上添加其他字段,可以改用SMS模型吗? auto_sms
的自动化?谢谢