如何在预定时间提交Django表格?

2024-09-26 18:06:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个典型的表单,用户可以在其中输入他们的值,提交表单并在表中查看结果:

class ScanForm(form.ModelForm):
""" Creating a form for Scan results """
    value = forms.DecimalField(widget=forms.NumberInput(
        attrs={
            'class': 'form-control',
            'placeholder': 'Value',
            'max': '500',
        }
    ))
    count = forms.DecimalField(widget=forms.NumberInput(
        attrs={
            'class': 'form-control',
            'placeholder': 'Amount',
            'max': '400',
            }
    ))
    class Meta:
    """ Adding choice of interval and exclude unused fields """
        model = ScannedValue
        exclude = ('scan_date',)
        widgets = {
            'interval': forms.Select(
                attrs={
                    'class': 'form-control',
                }),
        }

我正在我的电脑里渲染那个表格索引.html照常归档。 当我把所有的数据放进去,按“提交”按钮,它就正常工作了。你知道吗

但是我需要的是在特定的时间,比如说每天下午1:00,自动提交这个带有填充值的表单(比如'value'=5,'count'=10)。提交表单后,我需要在视图中使用函数解析所有接收到的数据,然后将结果保存到数据库中。做这件事的最佳和最正确的方法是什么?你知道吗

下面是函数视图.py地址:

def scans(request): 
    form = ScanForm(request.POST or None) 
    if request.method == 'POST': 
        if form.is_valid(): 
            def fetch_scan(interval='1', amount=10, value=5): 
                # doing_some_stuff
else: 
form = ScanForm()

所以我只想在每天的某个时间用我的参数自动启动函数fetch\u scan()。你知道吗


Tags: 函数form表单scanvaluerequestformswidget
1条回答
网友
1楼 · 发布于 2024-09-26 18:06:20

你不需要为你的用例提交表单。您需要在视图外定义fetch_scan,然后将其转换为芹菜任务。然后,它可以作为周期性任务运行。你知道吗

@app.task()  # convert to celery task
def fetch_scan(interval='1', amount=10, value=5): 
       # doing_some_stuff

def scans(request): 
    form = ScanForm(request.POST or None) 
    if request.method == 'POST': 
        if form.is_valid(): 
            fetch_scan()  # call the function
    else: 
      form = ScanForm()

然后你就可以每天运行fetch_scan任务了。你知道吗

#settings.py

from celery.schedules import crontab
CELERYBEAT_SCHEDULE = {
    'daily-scan': {
        'task': 'path.to.fetch_scan',
        'schedule': crontab(hour=13),  #run daily at 1 pm
    },
}

docs

相关问题 更多 >

    热门问题