Django: Как автоматически заполнить всю форму модели данными по нажатию кнопки «Загрузить» после принятия первичного ключа в качестве ввода текста от пользователя - PullRequest
0 голосов
/ 14 октября 2019

Я новичок в Django.

У меня есть нижеприведенное требование в форме модели Django при создании новой записи с формой отправки для выполнения.

1.В обработке формы я хочу:автоматическое заполнение всех полей формы на основе ввода текста первичного ключа пользователя. 2. Пользовательский ввод текста с шага 1 является первичным ключом уже созданной записи в БД MySQL, которая создается перед обработкой запроса POST, когда пользователь вручную заполняет форму всеми полями формы и нажимает на кнопку отправить.

Пример:

Предположим, что в базе данных 10 записей. Каждая запись содержит около 12 полей. Чтобы создать новую запись (11-я запись), мы сначала нажимаем кнопку «AddGSP», которая открывает форму, ожидающую ввода пользователя. У 11-й записи, которая будет создана, есть только одно значение поля, которое необходимо изменить с 5-й записи. Вместо того, чтобы вручную вводить все поля, я хочу автоматически заполнить все формоданные на основе пользовательского ввода текста.

Поскольку пользователь не хочет заполнять все детали, присутствующие в форме, я создал входной текст с «нагрузкой»кнопка. Если пользователь вводит: 5 в качестве ввода текста и нажимает кнопку «загрузить», то форма должна заполнить или (загрузить) все детали, аналогичные 5-й записи из базы данных, и теперь пользователь должен изменить только необходимые поля в текущей форме и нажатьпри отправке создает новую запись (скажем, 11-е число).

Пожалуйста, дайте нам знать, как продолжить, чтобы загрузить форму с необходимыми данными .?

Models.py:

class ApplyGSP(models.Model):
    """
    This class is used to Apply the GoogleSecurityPatches when the user requested to apply the GSP
    """
    user = models.CharField("User", max_length=100, default="")
    model_name = models.CharField(max_length=100, blank=True)
    model_no = models.CharField(max_length=100, blank=True)
    os_ver = models.ForeignKey(OSVersion, on_delete=models.CASCADE, verbose_name="os Version")
    chipset = models.ManyToManyField(Chipset)
    patch_level_to_be_applied = models.CharField(max_length=200, blank=True)
    rel_cycle = models.ForeignKey(ReleaseCycle, on_delete=models.CASCADE, verbose_name="Release Cycle")
    requested_time = models.DateTimeField(default=timezone.now)
    applied_gsp_count = models.IntegerField(null=True,default="")
    applied_security_patch_level = models.TextField(default="")
    from_sas_url = models.ForeignKey(SourceSASURL, on_delete=models.CASCADE, verbose_name="Source SAS URL")
    to_sas_url `enter code here`= models.URLField()
    def_src_manifest = models.ManyToManyField(DefaultSrcManifest)
    # from_manifest = models.CharField(max_length=200)
    # to_manifest = models.CharField(max_length=200)
    from_sw_version = models.IntegerField(null=True)
    to_sw_version = models.IntegerField(null=True)
    description = models.CharField(max_length=200)

    class Meta:
        verbose_name_plural = "ApplyGSPPatches"

    def __str__(self):
        return self.user + str(self.pk)

My Forms.py:
------------
class ApplyGSPForm(ModelForm):

    helper = FormHelper()
    class Meta:
        model = ApplyGSP

        fields = ['model_name', 'model_no', 'os_ver', 'chipset', 'patch_level_to_be_applied', 'rel_cycle','applied_gsp_count', 'from_sas_url', 'to_sas_url', 'def_src_manifest', 'from_sw_version',
'to_sw_version', 'description']

My Views.py:
----------
def apply_gsp_request_form(request, id=None):
    """
    :param request: Accept http request
    :param id: Id of Requested User record
    :return: http response
    """
    print("Inside Apply Google Security Patch Form:", id)
    print("request:", request.method)
    print("request.GET:",request.GET)
    load_input_value = request.GET.get('loaddata')
    print("load input value:",load_input_value)

    if id:
        action = 'edit'
        model = get_object_or_404(ApplyGSP, pk=id)
    else:
        action = 'submit'
        model = ApplyGSP()

    message = ""

    if request.method == 'POST':
        form = ApplyGSPForm(request.POST, instance=model)

        if form.is_valid():
            new_apply_gsp_request = form.save(commit=False)
            new_apply_gsp_request.user = request.user.username
            new_apply_gsp_request.save()
            return HttpResponseRedirect('/gspapp/ApplyGSPList')

    else:
        print("when the request is GET ,call ApplyGSPForm ")
        form = ApplyGSPForm(instance=model)

    context = {'form': form, 'Message': message, 'action': action}
    return render(request, 'ApplyGSP.html', context)
ApplyGSP.html:
--------------
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block static %}
{% endblock static %}

{% block content %}
            <form method="GET" role="form" action="">
                 <div class="input-group mb-2 float-left" style="padding-left:120px">
                        <div class="input-group-prepend">
                            <span class="input-group-text row-md-6" id="inputGroup-sizing-default">Load</span>
                        </div>
                        <input type="text" name="loaddata" class="form-control col-md-4" id="inputtext" aria-label="Default" aria-describedby="inputGroup-sizing-default">

                     <a href="{%url 'gspapp:ApplyGSPRequestForm' %}">
                        <button type="button" class="fas fa-sync-alt btn btn-secondary btn-lg" aria-describedby="inputtext"><span class="ml-1">Load</span></button>
                     </a>
                 </div>
            </form>

            <form method="POST" class="form" role="form" action="">
                <!-- The below CSRF Token makes form Secure -->
                {% csrf_token %}

                <div class="container">
                    <br>
                    <br>
                    {% crispy form %}
                        <button type="submit" class="btn btn-primary">
                            {% if action == "submit" %}
                                <span class="fas fa-plus"></span>Submit
                            {% else %}
                                <span class="fas fa-edit"></span>Update
                            {% endif %}
                        </button>
                        <button type="reset" class="btn btn-primary" aria-label="Close" data-dismiss="modal">
                            <span aria-hidden="true">&times;</span>Cancel
                        </button>
                </div>
            </form>

{% endblock content %}

{% block scripts %}
{% endblock scripts %}

urls.py:
------
urlpatterns = [

    path('ApplyGSPList/', login_required(views.ApplyGSPList.as_view(), login_url='/gspapp/login/'), name='ApplyGSPList'),
    path('ApplyGSPList/requestForm/', views.apply_gsp_request_form, name='ApplyGSPRequestForm'),
    re_path(r'^editApplyGSP/(?P<id>\d+)/$', views.apply_gsp_request_form, name='editApplyGSP'),   
]

С уважением, Н.Дилип Кумар.

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