I am at beginner level in django and trying to upload excel file from Django admin and want to insert it's data into the database with some other custom fields from Django Admin. However, I am able to create the final object with all data but on final insertion I am getting 'No reverse match error'. Actual Error
Note : I didn't create any view or did any URL configurations as it is admin panel and whatever examples I saw didn't see any other configurations. I wrote the following code to achieve this.
Thanks in advance for your help!
# model.py
from django.db import models
from django.urls import reverse
class tblform(models.Model):
ALSName = models.CharField(max_length=100)
Study = models.CharField(max_length=100)
FormId = models.CharField(max_length=100,primary_key=True)
DraftName = models.CharField(max_length=100)
OID=models.CharField(max_length=100)
Ordinal = models.IntegerField(blank=True,null=True)
DraftFormName = models.CharField(max_length=100)
DraftFormActive = models.BooleanField(default=False)
HelpText = models.CharField(max_length=100,blank=True,null=True)
IsTemplate = models.BooleanField(default=False)
# forms.py
from django import forms
from .models import tblform
class tblform_Form(forms.ModelForm):
excel_file = forms.FileField(required=False)
class Meta:
model = tblform
fields = ('ALSName','Study','DraftName')
# admin.py
from django.contrib import admin
from .models import tblform
from .forms1 import tblform_Form
import openpyxl
class ProductAdmin(admin.ModelAdmin):
form = tblform_Form
def save_model(self, request, obj, form, change):
if 'excel_file' in request.FILES:
excel_file = request.FILES['excel_file']
#form_data = self.get_form(request).cleaned_data
field_names = [field.name for field in tblform._meta.get_fields() if field.name not in ['Study', 'DraftName','ALSName','tblfield','FormId']]
Study = form.cleaned_data.get('Study')
ALSName = form.cleaned_data.get('ALSName')
DraftName = form.cleaned_data.get('DraftName')
workbook = openpyxl.load_workbook(excel_file)
worksheet = workbook['Forms1']
for row in worksheet.iter_rows(min_row=2, values_only=True):
field_values = dict(zip(field_names, row))
if field_values['DraftFormActive'] == "TRUE":
field_values['DraftFormActive'] = True
else:
field_values['DraftFormActive'] = False
if field_values['IsTemplate']=="TRUE":
field_values['IsTemplate']=True
else:
field_values['IsTemplate']=False
if field_values['IsSignatureRequired']=="TRUE":
field_values['IsSignatureRequired']=True
else:
field_values['IsSignatureRequired']=False
if field_values['IsEproForm']=="TRUE":
field_values['IsEproForm']=True
else:
field_values['IsEproForm']=False
FormId = str(ALSName) + str(field_values['OID'])
field_values.update({'FormId': FormId, 'Study': Study, 'ALSName': ALSName, 'DraftName': DraftName})
tblform.objects.create(**field_values)
self.message_user(request, "Data imported successfully.")
else:
self.message_user(request, "Invalid form data. Please check the form fields.")
save_model.short_description = "Import data "
actions = [save_model]
admin.site.register(tblform, ProductAdmin)