0

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)

                            



  • please post complete error trace – Razenstein Jun 06 '23 at 07:31
  • Hi @Razenstein I have already added the screen shot in description under actual error link. – sandeep rathore Jun 07 '23 at 08:04
  • the error trace is below not visible in the screenshot – Razenstein Jun 07 '23 at 14:10
  • Tried on my setup and I am able to reproduce the issue. However, I couldn't get to resolve the NoReverseMatch exception. The issue seems to be with save_model(), its not getting triggered since the obj.FormId is null. I'd suggest you to try this solution -- https://stackoverflow.com/a/15503966 – Aseem Yadav Jun 09 '23 at 18:01

0 Answers0