Создание подформы внутри формы для заполнения абстрактной формы
Я пытался разобраться в этом, бился головой и рылся на форумах и в Google. Надеюсь, у кого-то был опыт в этом. Я пытаюсь создать подформу для поиска текста в классе PostForm, которая вызывает скрипт. Пользователь вводит DOI или PMID и ищет в базе данных PUBMED. У меня получается, что скрипт берет данные с сервера, но я хотел бы понять, как пользователь продолжает заполнять остальные данные. Поэтому вместе с вызванными данными и вводом пользователя сохраняю как пост. Здесь я использую Django-Machina Blog в качестве платформы.
Таким образом, пользователь вводит DOI или PMID, возвращает запрос, который затем может ввести информацию в содержание.
[Form][1]
AbstractModel:
class PostForm(forms.ModelForm):
""" Allows to create or update forum posts. """
class Meta:
model = Post
fields = ['subject', 'content', 'username', 'update_reason', 'enable_signature', 'doi', ]
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user', None)
self.forum = kwargs.pop('forum', None)
self.topic = kwargs.pop('topic', None)
self.perm_handler = PermissionHandler()
super().__init__(*args, **kwargs)
# Updates the 'subject' and 'content' fields attributes
self.fields['subject'].widget.attrs['placeholder'] = _('Enter your subject')
self.fields['content'].label = _('Message')
self.fields['content'].widget.attrs['placeholder'] = _('Enter your message')
self.fields['doi'].label = _('Publication DOI#')
self.fields['doi'].widget.attrs['placeholder'] = _('Enter your DOI')
# Handles anonymous users
if self.user and self.user.is_anonymous:
self.fields['username'].required = True
else:
# The 'username' field is not really usefull if the user is authenticated
del self.fields['username']
# Handles the definition of a default subject if we are considering an answer
if not self.instance.pk and self.topic:
self.fields['subject'].initial = '{} {}'.format(
machina_settings.TOPIC_ANSWER_SUBJECT_PREFIX,
self.topic.subject)
# Delete the 'update_reason' field if we are considering a post update
if not self.instance.pk:
del self.fields['update_reason']
# Inserts a field to allow the user to lock the current topic if he has the permissions to
# do so.
if (
(self.instance.pk or self.topic) and
self.perm_handler.can_lock_topics(self.forum, self.user)
):
self.fields['lock_topic'] = forms.BooleanField(
label=_('Lock topic'), required=False,
initial=self.topic.status == Topic.TOPIC_LOCKED,
)
def clean(self):
""" Validates the form. """
if not self.instance.pk:
# Only set user on post creation
if not self.user.is_anonymous:
self.instance.poster = self.user
else:
self.instance.anonymous_key = get_anonymous_user_forum_key(self.user)
return super().clean()