【问题标题】:How to auto create a new row in a table every day or according to date django如何每天或根据日期自动在表中创建新行 django
【发布时间】:2021-07-28 13:44:12
【问题描述】:
# modaly.py
class User(modals.Modal): name = models.CharField(max_length=30)

class Traffic(models.Model): my_user = models.ForeignKey(User, on_delete=models.CASCADE)  per_day_user_visit = models.PositiveIntegerField(null=True, blank=True) traffic_date = models.DateField(auto_created=True)
id my_user per_day_user_visit traffic_date
1 instance 500 user_visit monday
2 instance 512 user_visit tuesday
# views.py
# Auto created a new row, when new day come
if newday:
    Traffic.objects.create(my_user = "1", per_day_user_visit = "512", date=datetime.now())

【问题讨论】:

  • 你可以为它创建一个 celery 任务,每天用 celerybeat 运行一次。
  • 这不是你会在 django 中做的事情,因为这是一个预定的工作。最好由作业调度程序完成。 Mysql 有一个使用 create 事件的内置程序,您可以使用操作系统附带的任何调度程序(例如 cron 或 windows 任务调度程序),或者您可以使用基于 pyton 的调度程序,例如 celery。您选择哪一种取决于您的具体要求。

标签: python mysql django django-models


【解决方案1】:

如果您想在用户每次点击视图时增加访问量,我建议您这样做:

from django.utils import timezone
today = timezone.now().date()

traffic, created = Traffic.objects.get_or_create(
    my_user=1,
    date=today,
    defaults={"per_day_user_visit":0}
)

# Now do whatever you need with your traffic object, for example:
traffic.per_day_user_visit += 1
traffic.save()

⚠️ 如果您的用户非常活跃,您可能会遇到性能问题。

此外,在用户未访问的日子里,您不会有条目。 get_or_create 部分可以通过 cron 或 celerybeat 以某种方式触发,如果您每天都需要一个条目,如 cmets 中所建议的那样。

【讨论】:

    猜你喜欢
    • 2018-04-11
    • 2021-12-11
    • 2014-07-30
    • 1970-01-01
    • 2023-03-17
    • 2012-12-31
    • 1970-01-01
    • 2022-01-22
    • 2023-03-08
    相关资源
    最近更新 更多