Я новичок в 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">×</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'),
]
С уважением, Н.Дилип Кумар.