Я хочу создать форму, в которой запрашивается база данных, и предварительно заполнить поля, которые уже присутствовали в идентификаторе экземпляра модели или pk.
models.py
class Uploads(models.Model):
name = models.CharField(max_length=20,blank=True)
age = models.IntegerField(blank=True)
gstin = models.CharField(max_length=15,blank=False,default='xxxxxxxxxx00000')
PAN = models.CharField(max_length=10,default="xxxxxxxxxx",blank=False)
doc_pdf = models.FileField(upload_to='static/files',blank=True)
image = models.ImageField(upload_to='static/images',blank=True)
def __str__(self):
return self.name
forms.py [мне нужно использовать super (). Clean () в методе clean ?, также работает bcoz без использования super (), зачем использовать super ()]
class Uploadform(forms.ModelForm):
class Meta:
model = Uploads
fields ='__all__'
def clean_gstin(self):
gstin = self.cleaned_data.get('gstin')
print(gstin)
if len(gstin) != 15:
raise forms.ValidationError('Input correct length of GSTIN')
if gstin[:2].isdigit() == False:
raise forms.ValidationError('put the 1st two digits as number')
return gstin
def clean_PAN(self):
PAN = self.cleaned_data.get('PAN')
if len(PAN) != 10:
raise forms.ValidationError('input correct length')
return PAN
def clean(self):
gst = self.cleaned_data.get('gstin')
pan = self.cleaned_data.get('PAN')
print(pan)
print(gst)
if not pan in gst:
raise forms.ValidationError('worng GSTIN')
views.py
def uploadview_django(request , id):
x= Uploads.objects.all.filter(pk = id)
if x:
gst = x.gstin
pan = x.pan
if request.method == 'POST':
form = Uploadform(request.POST , request.FILES)
if form.is_valid():
form.save()
return redirect('index')
else:
form = Uploadform(gstin = gst , PAN = pan)
return render(request,'form.html',{'form':form})
после предложения сделать это:
def uploadview_django(request):
try:
x = Uploads.objects.all().filter(pk = 12)
except Uploads.DoesNotExists:
x= None
if request.method == 'POST':
form = Uploadform(request.POST , request.FILES , instance=x)
if form.is_valid():
form.save()
return redirect('index')
else:
form = Uploadform(instance=x)
return render(request,'form.html',{'form':form})
показывает ошибку:
Traceback:
Файл "C: \ Users \ J A X \ Anaconda3 \ envs \ madeenv \ lib \ site-packages \ django \ core \ handlers \ exception.py" во внутреннем каталоге
34. response = get_response (запрос)
Файл "C: \ Users \ J A X \ Anaconda3 \ envs \ madeenv \ lib \ site-packages \ django \ core \ handlers \ base.py" в _get_response
126. response = self.process_exception_by_middleware (e, request)
Файл "C: \ Users \ J A X \ Anaconda3 \ envs \ madeenv \ lib \ site-packages \ django \ core \ handlers \ base.py" в _get_response
124. response = wrapped_callback (запрос, * callback_args, ** callback_kwargs)
Файл "C: \ Users \ J A X \ Desktop \ Django \ practice \ Appone \ views.py" в uploadview_django
27. form = Uploadform (instance = x)
Файл "C: \ Users \ J A X \ Anaconda3 \ envs \ madeenv \ lib \ site-packages \ django \ forms \ models.py" в init
292. object_data = model_to_dict (экземпляр, opts.fields, opts.exclude)
Файл "C: \ Users \ J A X \ Anaconda3 \ envs \ madeenv \ lib \ site-packages \ django \ forms \ models.py" в model_to_dict
82. opts = instance._meta
Тип исключения: AttributeError at / form_django
Значение исключения: у объекта 'QuerySet' нет атрибута '_meta'