0
누구든지 django-fobi에서 기본 핸들러를 설정할 수 있습니까? 접근 방식은 무엇입니까? 모든 폼의 기본값으로 db_store 핸들러를 설정하고 싶습니다.django fobi에서 기본 핸들러를 설정하는 방법
모델에 기본값을 설정하려했지만 성공하지 못했습니다.
누구든지 django-fobi에서 기본 핸들러를 설정할 수 있습니까? 접근 방식은 무엇입니까? 모든 폼의 기본값으로 db_store 핸들러를 설정하고 싶습니다.django fobi에서 기본 핸들러를 설정하는 방법
모델에 기본값을 설정하려했지만 성공하지 못했습니다.
아무런 해결책이 없습니다. 다음과 같이
그러나, 당신은 할 수 :
해결 방법 1 :의 FormEntry
모델의 업데이트를보고 프로그래밍 방식으로 형태가 저장 될 때마다 플러그인 db_handler를 추가 장고 신호를 사용
(그것은 그것 아직 할당되지 않았습니다).
from django.core.exceptions import ObjectDoesNotExist
from django.db.models.signals import post_save, post_delete
from django.dispatch import receiver
@receiver(post_save)
def update_document(sender, **kwargs):
app_label = sender._meta.app_label
model_name = sender._meta.model_name.lower()
instance = kwargs['instance']
if app_label == 'fobi' and model_name == 'formentry':
from fobi.models import FormHandlerEntry
FormHandlerEntry.objects.get_or_create(
plugin_uid='db_store',
form_entry=instance
)
해결 방법 2 :
또한 양식 콜백을 등록 할 수 있습니다 (fobi 양식 제출 프로세스의 거의 각 단계에 대해 구현 콜백을 가지고).
콜백에서 db_store
플러그인의 기능을 모방해야합니다 (주로 복사 - 붙여 넣기).
import datetime
import simplejson as json
from fobi.base import (
form_callback_registry,
FormCallback,
get_processed_form_data,
)
from fobi.constants import CALLBACK_FORM_VALID
from fobi.contrib.plugins.form_handlers.db_store.models import SavedFormDataEntry
class AutoDbStore(FormCallback):
stage = CALLBACK_FORM_VALID
def callback(self, form_entry, request, form):
form_element_entries = form_entry.formelemententry_set.all()
# Clean up the values, leave our content fields and empty values.
field_name_to_label_map, cleaned_data = get_processed_form_data(
form,
form_element_entries
)
for key, value in cleaned_data.items():
if isinstance(value, (datetime.datetime, datetime.date)):
cleaned_data[key] = value.isoformat() \
if hasattr(value, 'isoformat') \
else value
saved_form_data_entry = SavedFormDataEntry(
form_entry=form_entry,
user=request.user if request.user and request.user.pk else None,
form_data_headers=json.dumps(field_name_to_label_map),
saved_data=json.dumps(cleaned_data)
)
saved_form_data_entry.save()
form_callback_registry.register(AutoDbStore)