Как вызвать пользовательский код Python, когда в базе данных сохранена правильная форма Django - PullRequest
0 голосов
/ 22 марта 2019

Новичок Django здесь, я создал простую форму после этого учебника, и моя форма правильно сохраняет данные в моей локальной базе данных, связанной с Postgres. Мне было интересно, как я могу вызвать функцию, когда действительная форма сохраняется в базе данных? Код, который я хочу запустить, представляет собой простую функцию, которая написана в файле Python и выполняет некоторую обработку последних данных, предоставленных первой формой. Я хочу, чтобы он запускался только тогда, когда сохранены правильные данные формы, и мне было интересно, если мой путь запуска триггера сигнала django. Не стесняйтесь спрашивать о любых дальнейших разъяснениях. Другими словами, Я хочу выполнить некоторую постобработку данных, присутствующих в базе данных, которая заполняется формой, и запустить постобработку только тогда, когда в базу данных введены действительные данные * 1004. *.

Вот мой код:

views.py

from django.shortcuts import render
from django.http import HttpResponse
from .forms import auditform, ClientAuditForm
from django.db.models.signals import post_save
from . import rocode



# def auditingfun(request):
#     return HttpResponse('Auditing form works')
# # Create your views here.

def auditingfun(request):

    if request.method == 'POST':
        forminput = auditform(request.POST)
        if forminput.is_valid():

            Name = forminput.cleaned_data['Name']
            Origin = forminput.cleaned_data['Origin']
            ClientAddress = forminput.cleaned_data['ClientAddress']
            DispatchType = forminput.cleaned_data['DispatchType']
            ETA = forminput.cleaned_data['ETA']
            GSTIN = forminput.cleaned_data['GSTIN']
            # print(GSTIN,Name,Origin,Destination,MaterialType,Preference,ClientAddress,DispatchType,ETA)

    forminput = auditform(request.POST)
    return render(request, 'auditing/auditform.html', {'forminput': forminput} )

forms.py

from django import forms
from .models import auditModel

class auditform(forms.Form):
    Origin = forms.CharField()
    Destination = forms.CharField()
    MaterialType = forms.CharField()
    Preference = forms.CharField()
    ClientAddress = forms.CharField(widget=forms.Textarea)
    Name = forms.CharField()
    GSTIN = forms.IntegerField()
    DispatchType = forms.ChoiceField(choices=[('Question','Inbound'),('Other','Outbound')])
    ETA = forms.CharField()


class ClientAuditForm(forms.ModelForm):

    class Meta:
            model = auditModel
            fields = ('Origin','Destination','MaterialType','GSTIN','Name','Preference','ClientAddress','DispatchType','ETA')

Просто для простоты, представьте пользовательский код (импортированный в файле views.py как rocode.py). Я только что добавил введенные данные и сохранил данные в той же базе данных, в другом столбце.

1 Ответ

1 голос
/ 22 марта 2019

что вы хотите использовать здесь, это сигналы.Сигнал - это некоторая функция, которая выполняется после добавления или обновления элемента в вашей базе данных.Предполагая, что ваша модель, к которой вы хотите подключиться, называется «MyModel», сделайте следующее:

from django.db.models.signals import post_save
from django.dispatch import receiver
from myapp.models import MyModel


@receiver(post_save, sender=MyModel)
def my_handler(sender, instance, created, **kwargs):
    if created:
        # run your custom code HERE

экземпляр - это то, что было вставлено / обновлено, созданный является логическим значением, указывающим, было ли это обновление или вставка.* документы: https://docs.djangoproject.com/en/2.1/topics/signals/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...