问题
On Django-1.9.6, django-import-export-0.5
When I try to upload CSV without "id" field throws this error.
Line number: 1 - u'id'
13173474, Harry McDade, 10.harry.asas@asasasas.com
Traceback (most recent call last):
File "/Users/isanka/dev/venv/edxubase/lib/python2.7/site-packages/import_export/resources.py", line 434, in import_row
instance, new = self.get_or_init_instance(instance_loader, row)
File "/Users/isanka/dev/venv/edxubase/lib/python2.7/site-packages/import_export/resources.py", line 258, in get_or_init_instance
instance = self.get_instance(instance_loader, row)
File "/Users/isanka/dev/venv/edxubase/lib/python2.7/site-packages/import_export/resources.py", line 252, in get_instance
return instance_loader.get_instance(row)
File "/Users/isanka/dev/venv/edxubase/lib/python2.7/site-packages/import_export/instance_loaders.py", line 31, in get_instance
field = self.resource.fields[key]
KeyError: u'id'
回答1:
Seems "django-import-export" still using the default one 'id'. for the time been, included a column 'id' in the header in CSV file and excluded importing in resources.py
class edxUserResource(resources.ModelResource):
class Meta:
model = edxUser
skip_unchanged = True
report_skipped = True
exclude = ('id',)
import_id_fields = ('edx_id', 'edx_email', 'edx_name',)
#export_order = ('edx_id', 'edx_email')
回答2:
The id field is an auto increment field, so if you're adding new records (I believe its the most case) the id field should be there in the header (first line of csv file) and the rest of the rows should contain empty id like : ,
Example:
CSV File:
id, username,email,password
,ahmad,ahmad@all.com,secretum
,salafi,salafi@gmail.com,Passhdjdj
In the Resource file (py):
class JasResult(ImportExportModelAdmin):
resource_class = JasResource
skip_unchanged = True
report_skipped = True
exclude = ('id',)
import_id_fields = ('username','email','password')
This should fine for most cases.
回答3:
i have figure out the solution to import without ID column Here is code , Take a Look
if request.method == 'POST':
queryset = Client.objects.filter(company=company)
company = Company.objects.get(id=company)
person_resource = ClientResource()
dataset = Dataset()
new_persons = request.FILES['myfile']
imported_data = dataset.load(new_persons.read().decode('utf-8'), format='csv')
try:
for row in dataset:
client = Client()
client.company = company
client.title = row[0]
client.first_name = row[1]
client.last_name = row[2]
client.email = row[3]
client.position = row[4]
client.company_name = row[5]
client.vat_number = row[6]
client.website = row[7]
client.address = row[8]
client.city = row[9]
client.state = row[10]
client.zip = row[11]
client.country = row[12]
client.phone = row[13]
client.fax = row[14]
client.notes = row[15]
client.save()
except Client.DoesNotExist:
raise Http404("There is a Problem with The CSV")
return render(request, 'import.html')
And my Resource Looks Like this
class ClientResource(resources.ModelResource):
company = fields.Field(
column_name='company',
attribute='company',
widget=ForeignKeyWidget(Company, 'name'))
class Meta:
model = Client
skip_unchanged = True
report_skipped = True
exclude = ('id', 'company', 'status', 'modified', 'created')
import_id_fields = ['email']
来源:https://stackoverflow.com/questions/45028975/django-import-export-cannot-exclude-id-field-during-import-keyerror-uid