Создание подформы внутри формы для заполнения абстрактной формы

Я пытался разобраться в этом, бился головой и рылся на форумах и в 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()
Вернуться на верх