Quantcast
Channel: Recent Questions - Stack Overflow
Viewing all articles
Browse latest Browse all 12111

Django-import-export not importing csv or excel file with ForeignKey attribute in The Django admin site panel

$
0
0

I am using the Django-import-export module in Django(version 4.0.1).

I have 2 different tables named State and District

the district model is using state_name as ForeignKey

The fields in state table can be imported from the Django admin site panel without any issue as:state

but district attributes can not be imported via csv/excel file and the error is as follows:

Line number: 1 - 'id'ANDAMAN AND NICOBAR ISLANDS, NICOBARSTraceback (most recent call last):File "C:\Python_Abhilash\AppData\Local\Programs\Python\Python310\lib\site-packages\import_export\resources.py", line 667, in import_rowinstance, new = self.get_or_init_instance(instance_loader, row)File "C:\Python_Abhilash\AppData\Local\Programs\Python\Python310\lib\site-packages\import_export\resources.py", line 359, in get_or_init_instanceinstance = self.get_instance(instance_loader, row)File "C:\Python_Abhilash\AppData\Local\Programs\Python\Python310\lib\site-packages\import_export\resources.py", line 346, in get_instanceimport_id_fields = [File "C:\Python_Abhilash\AppData\Local\Programs\Python\Python310\lib\site-packages\import_export\resources.py", line 347, in <listcomp>self.fields[f] for f in self.get_import_id_fields()KeyError: 'id'

The model.py is as:

from django.db import models####################################################################################class State(models.Model):    state_name = models.CharField(max_length=30)    class Meta:        db_table = 'State_Names'    def __str__(self):        return self.state_name####################################################################################class District(models.Model):    state_name = models.ForeignKey(State, on_delete=models.CASCADE)    district_name = models.CharField(max_length=30)    class Meta:        db_table = 'District_Names'    def __str__(self):        return self.district_name

The resources.py is as:

from import_export import fields, resourcesfrom import_export.widgets import ForeignKeyWidgetfrom damuwhatsapp.models import Statefrom damuwhatsapp.models import Districtclass StateResource(resources.ModelResource):    class Meta:        model = Stateclass DistrictResource(resources.ModelResource):    class StateForeignKeyWiget(ForeignKeyWidget):        def get_queryset(self, value, row):            return self.model.objects.filter(                state_name__exact=row["state_name"],            )    state_name = fields.Field(        column_name='state_name',        attribute='state_name',        widget=StateForeignKeyWiget(            State,            field='state_name'        )    )    district_name = fields.Field(column_name="district_name", attribute="district_name")    class Meta:        model = District        exclude = ('id')        fields = ('state_name','district_name',)

The admin.py is as:

from django.contrib import adminfrom import_export.admin import ImportExportModelAdmin from damuwhatsapp.models import Statefrom damuwhatsapp.models import Districtfrom damuwhatsapp.resources import StateResourcefrom damuwhatsapp.resources import DistrictResourceclass StateAdmin(ImportExportModelAdmin, admin.ModelAdmin):    resource_class = StateResource    list_display = ("id", "state_name")    search_fields = ["state_name"]    readonly_fields = ["id"]    filter_horizontal = ()    list_filter = ()    fieldset = ()class DistrictAdmin(ImportExportModelAdmin, admin.ModelAdmin):    resource_class = DistrictResource    list_display = ["id","state_name","district_name"]    search_fields = ("state_name", "district_name")    readonly_fields = ["id"]    filter_horizontal = ()    list_filter = ()    fieldset = ()admin.site.register(State, StateAdmin)admin.site.register(District, DistrictAdmin)

I need to import the csv having district_name which uses state_names as ForeignKey field from Django Admin Panel. I have followed few question like but could not find the solution. Can you have a look at the code and see which part I am doing wrong or needs to be changed?Or what is the alternate option for doing so.

The CSV file structure which is to be imported is as.

enter image description here

admin panel:enter image description here


Viewing all articles
Browse latest Browse all 12111

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>