django-import-export error while importing data into database

Viewed 3823

Here's the SS of import error

And this is the SS of CSV file

    Line number: 1 - 'id'
    Traceback (most recent call last):
    File "/home/carlmark/Desktop/Final/realtyredefine/env/lib/python3.6/site- 
    packages/import_export/resources.py", line 500, in import_row
    instance, new = self.get_or_init_instance(instance_loader, row)
    File "/home/carlmark/Desktop/Final/realtyredefine/env/lib/python3.6/site- 
    packages/import_export/resources.py", line 277, in get_or_init_instance
    instance = self.get_instance(instance_loader, row)
    File "/home/carlmark/Desktop/Final/realtyredefine/env/lib/python3.6/site- 
    packages/import_export/resources.py", line 266, in get_instance
    self.fields[f] for f in self.get_import_id_fields()
    File "/home/carlmark/Desktop/Final/realtyredefine/env/lib/python3.6/site- 
    packages/import_export/resources.py", line 266, in <listcomp>
    self.fields[f] for f in self.get_import_id_fields()
    KeyError: 'id'
models.py

class PropertyModel(models.Model):
    Created_By = models.ForeignKey(User, default=1, null=True, on_delete=models.SET_NULL)
    Created_Date = models.DateTimeField(default=timezone.now)
    Serial_No = models.IntegerField()
    Property_ID = models.CharField(primary_key=True, max_length=15)
    Last_Updated_By = models.CharField(max_length=20, null=True, blank=True)
    Last_Updated_On = models.DateTimeField(null=True, blank=True)
    Hot = models.BooleanField(null=True, blank=True, default=False)
    Shared_Website = models.BooleanField(null=True, blank=True, default=False)
    MCG_Property_Code = models.CharField(max_length=20, null=True, blank=True)
    File_Name = models.CharField(max_length=20, null=True, blank=True)
    Picture_Attached = models.ImageField(upload_to='images', null=True, blank=True)
    # Project_info
    Land_Use = models.CharField(max_length=25, choices=land_choice, null=True, blank=True)
    Construction_Completion_Date = models.DateTimeField(null=True, blank=True)
    Project_Structure = models.CharField(max_length=25, choices=structure_choice, null=True, blank=True)
    Project_ID = models.CharField(max_length=20, null=True, blank=True)
    Project_Name = models.CharField(max_length=25, null=True, blank=True)
    Possession_Status = models.CharField(max_length=20, choices=possession_choice)
    Total_Plot_Area = models.CharField(max_length=10, null=True, blank=True)
    Unit_Plot_Area = models.CharField(max_length=20, null=True, blank=True, choices=unit_choice)
    Plot_No = models.CharField(max_length=10, null=True, blank=True)
    Total_Floor = models.CharField(max_length=2, null=True, blank=True)
    # Property Info
    Property_Status = models.CharField(max_length=20, choices=prop_status_choice)
    Property_For = models.CharField(max_length=20, choices=prop_for_choice)
    Calling_Update = models.CharField(max_length=20, null=True, blank=True, choices=calling_choice)
    Property_Type = models.CharField(max_length=15, choices=prop_type_choice)
    Property_Sub_Type = models.CharField(max_length=25, choices=prop_sub_type_choice)
    Property_Use = models.TextField()
    # Address
    Full_Address = models.TextField(null=True, blank=True)
    Building_Name = models.CharField(max_length=20, null=True, blank=True)
    Wing = models.CharField(max_length=20, null=True, blank=True)
    Unit_No = models.CharField(max_length=20, null=True, blank=True)
    Floor = models.CharField(max_length=20, null=True, blank=True)
    Block = models.CharField(max_length=20, null=True, blank=True)
    Landmark = models.CharField(max_length=20, null=True, blank=True)
    # All Locality
    All_Locality = models.TextField(null=True, blank=True)
    Road = models.CharField(max_length=20, null=True, blank=True)
    Colony = models.CharField(max_length=20, null=True, blank=True)
    Locality_1 = models.CharField(max_length=20, null=True, blank=True)
    Locality_2 = models.CharField(max_length=20, null=True, blank=True)
    Sector = models.CharField(max_length=20, choices=sector_choice, null=True, blank=True)
    Area = models.CharField(max_length=20, null=True, blank=True)
    City = models.CharField(max_length=15, choices=city_choioce)
    State = models.CharField(max_length=20, choices=state_choice)
    Country = models.CharField(max_length=10, choices=country_choice)
    Pin_Code = models.CharField(max_length=20, null=True, blank=True)
    # Owner Details
    Owner_ID = models.CharField(max_length=20, null=True, blank=True)
    Owner_Full_Name = models.TextField(null=True, blank=True)
    Owner_All_Contact = models.TextField(null=True, blank=True)
    Owner_Source_Type = models.CharField(max_length=20, null=True, blank=True, choices=owner_source_choice)
    Owner_Company_Name = models.CharField(max_length=20, null=True, blank=True)
    Owner_Name = models.CharField(max_length=50)
    Owner_Mobile = models.CharField(max_length=15)
    Owner_Home_Landline = models.CharField(max_length=15, null=True, blank=True)
    Owner_Office_Landline = models.CharField(max_length=15, null=True, blank=True)
    Owner_Alternative_No1 = models.CharField(max_length=15, null=True, blank=True)
    Owner_Alternative_No2 = models.CharField(max_length=15, null=True, blank=True)
    Owner_Alternative_No3 = models.CharField(max_length=15, null=True, blank=True)
    Owner_Email = models.EmailField(null=True, blank=True)
    Owner_Address = models.TextField(null=True, blank=True)
    Owner_Representative_Name = models.CharField(max_length=20, null=True, blank=True)
    Owner_Representative_No = models.CharField(max_length=15, null=True, blank=True)
    Owner_Caretaker_Name = models.CharField(max_length=20, null=True, blank=True)
    Owner_Caretaker_No = models.CharField(max_length=15, null=True, blank=True)
    Co_Owner_Name = models.CharField(max_length=20, null=True, blank=True)
    Co_Owner_No = models.CharField(max_length=15, null=True, blank=True)
    Owner_Comment = models.TextField(null=True, blank=True)
    # Area
    Super_Area_Min = models.CharField(max_length=10, null=True, blank=True)
    Super_Area_Max = models.CharField(max_length=10)
    Unit_Area = models.CharField(max_length=10, choices=unit_choice)
    Maintainance_Charge_PSF = models.CharField(max_length=10, null=True, blank=True)
    Maintainance_Charge_Min_Rs = models.CharField(max_length=10, null=True, blank=True)
    Maintainance_Charge_Max_Rs = models.CharField(max_length=10, null=True, blank=True)
    Efficiency = models.CharField(max_length=3, null=True, blank=True)
    Covered_Area_Min = models.CharField(max_length=10, null=True, blank=True)
    Covered_Area_Max = models.CharField(max_length=10, null=True, blank=True)
    Expected_Rent_PSF = models.IntegerField()
    Expected_Rent_Min_Rs = models.IntegerField()
    Expected_Rent_Max_Rs = models.IntegerField()
    For_Sale = models.BooleanField(null=True, blank=True, default=False)
    Sale_Price_PSF = models.IntegerField()
    Sale_Price_Min_Rs = models.IntegerField()
    Sale_Price_Max_Rs = models.IntegerField()
    # Aminities
    All_Aminities = models.TextField(null=True, blank=True)
    Aminities_1 = models.CharField(max_length=20, null=True, blank=True)
    Aminities_2 = models.CharField(max_length=20, null=True, blank=True)
    Aminities_3 = models.CharField(max_length=20, null=True, blank=True)
    Aminities_4 = models.CharField(max_length=20, null=True, blank=True)
    Aminities_5 = models.CharField(max_length=20, null=True, blank=True)
    Aminities_6 = models.CharField(max_length=20, null=True, blank=True)
    Aminities_7 = models.CharField(max_length=20, null=True, blank=True)
    # Property Details
    Vastu = models.CharField(max_length=15, null=True, blank=True, choices=vastu_choice)
    Furnishing_Type = models.CharField(max_length=25, choices=furn_type_choice, null=True, blank=True)
    Furnishing_Quality = models.CharField(max_length=15, null=True, blank=True, choices=furn_quality_choice)
    Property_Available = models.CharField(max_length=20, choices=prop_avail_choice, null=True, blank=True)
    Property_Remarks_Internal = models.TextField(null=True, blank=True)
    Property_Remarks_External = models.TextField(null=True, blank=True)
    # Furnishing Details
    Furnishing_Detail = models.TextField(null=True, blank=True)
    Property_Condition = models.CharField(max_length=20, null=True, blank=True)
    Cabin_No = models.CharField(max_length=3, null=True, blank=True)
    Workstation_No = models.CharField(max_length=5, null=True, blank=True)
    Car_Parking_No = models.CharField(max_length=3, null=True, blank=True)
    Conference_No = models.CharField(max_length=3, null=True, blank=True)
    Pantry = models.CharField(max_length=3, null=True, blank=True)
    Server_Room = models.CharField(max_length=3, null=True, blank=True)
    Meeting_Room = models.CharField(max_length=3, null=True, blank=True)
    Cubical = models.CharField(max_length=3, null=True, blank=True)
    Keys_With = models.CharField(max_length=20, null=True, blank=True)
    # eXtra
    Internal_Comments = models.TextField(null=True, blank=True)
    External_Comments = models.TextField(null=True, blank=True)
    Assigned_Manger = models.CharField(max_length=20, choices=manager_choice)
    Group = models.CharField(max_length=20, choices=group_choice)
    Teams = models.CharField(max_length=20, choices=team_choice)
    Source_Channel = models.CharField(max_length=20, choices=source_channel_choice)
    Sub_Source_Channel = models.CharField(max_length=20, choices=sub_source_choice)
    # Pre-rented
    Pre_Rented = models.BooleanField(null=True, blank=True, default=False)
    Company_Name = models.CharField(max_length=20, null=True, blank=True)
    Pre_Rented_Area_Min = models.CharField(max_length=10, null=True, blank=True)
    Pre_Rented_Area_Max = models.CharField(max_length=10, null=True, blank=True)
    ROI = models.CharField(max_length=3)
    Sale_Price_Pre_Rented_PSF = models.IntegerField()
    Sale_Price_Pre_Rented_Min_Rs = models.IntegerField()
    Sale_Price_Pre_Rented_Max_Rs = models.IntegerField()
    Sale_Remark = models.TextField(null=True, blank=True)
    # Lease Terms
    Lease_Start = models.DateTimeField(null=True, blank=True)
    Possession_Date = models.DateTimeField(null=True, blank=True)
    Lease_Period = models.CharField(max_length=20, null=True, blank=True)
    Security_Deposit = models.CharField(max_length=10)
    Lock_in_Period = models.CharField(max_length=3)
    Monthly_Rent_Min_Rs = models.CharField(max_length=10, null=True, blank=True)
    Monthly_Rent_Max_Rs = models.CharField(max_length=10, null=True, blank=True)
    Rent_Escalation = models.CharField(max_length=3)
    Pre_Rented_Remark = models.TextField(null=True, blank=True)
    # Remaining
    Extra1 = models.CharField(max_length=20, null=True, blank=True)
    Extra2 = models.CharField(max_length=20, null=True, blank=True)
    Extra3 = models.CharField(max_length=20, null=True, blank=True)
    Extra4 = models.CharField(max_length=20, null=True, blank=True)
    Attachement = models.CharField(max_length=20, null=True, blank=True)
    Video_Link = models.CharField(max_length=20, null=True, blank=True)

    objects = PropertyManager()

    class Meta:
        verbose_name_plural = "Properties"
        ordering = ['-Created_Date']

    def __str__(self):
        return self.Property_ID

admini.py

@admin.register(PropertyModel)
class PropertyAdmin(ImportExportModelAdmin):
    list_display = ['Property_ID', 'Created_By', 'Last_Updated_By']

I'm trying to import data from a CSV file to my Django database but whenever I tried to import I got "KeyError: 'id'" although there's no "id" field in my model. I'm this issue only when I using PostgreSQL, there's no error when I import the same data in sqlite3.

4 Answers

I had a similar problem. It is that for import django import-export uses "id" by default. First, create a resources.py file - where you will declare settings for import and export. And as an exception, declare "id".

resources.py

from import_export import resources
from .models import *

class PropertyAdminResource(resources.ModelResource):

    class Meta:
        model   =   PropertyModel
        exclude = ('id',)

admin.py

from .resources import *

@admin.register(PropertyModel)
class PropertyAdmin(ImportExportModelAdmin):
    resource_class  =   PropertyAdminResource
    list_display = ['Property_ID', 'Created_By', 'Last_Updated_By']

I highly recommend using resources.py - where you can modify the methods for import and export.

you need to let the resources model know your primary key, if it didn't find it will automatically set it to 'id'

here is an example

models.py

class Product(models.Model):
  my_id =  models.CharField(max_length=255, primary_key=True)

admin.py

from import_export.admin import ImportExportModelAdmin
from import_export import resources

class ProductAdminResource(resources.ModelResource):
    class Meta:
         model = Product
         import_id_fields = ['my_id']

@admin.register(Product)
class ProductAdminView(ImportExportModelAdmin):
    resource_class = ProductAdminResource
Related