django-import-export: import error, 'get() keywords must be strings'
I’m having trouble getting a form to accept data on import. Currently testing csv format file; get same errors with xls file.
sample from import.csv:
jid,project_code,collab_id,sample_code,sequencing_type
JMQN3H,AAST,42567,ST,1
JO2FT1,AAST,43267,ST,1
The error coming out is get() keywords must be strings.
django error log:
Line number: 1 - get() keywords must be strings
OrderedDict([('jid', 'JMQN3H'), ('project_code', 'AAST'), ('collab_id', '42567'), ('sample_code', 'ST'), ('sequencing_type', '1')])
Traceback (most recent call last):
File "/var/www/django/jid_generator/lib/python3.4/site-packages/import_export/resources.py", line 356, in import_data
instance, new = self.get_or_init_instance(instance_loader, row)
File "/var/www/django/jid_generator/lib/python3.4/site-packages/import_export/resources.py", line 186, in get_or_init_instance
instance = self.get_instance(instance_loader, row)
TypeError: get() keywords must be strings
I tried putting the values in csv file inside quotes.
I tried modifying the admin, form and the Resource widgets.
admin.py:
"""ImportExport Resource"""
class DetailResource(resources.ModelResource):
jid = fields.Field(
default=generate_Jid(prefix='J'),
readonly=True,
widget=widgets.CharWidget(),
)
project_code = fields.Field(column_name='project_code', attribute='project_code',
widget=widgets.ForeignKeyWidget(ProjectCode, 'code'),
)
sample_type = fields.Field(
widget=widgets.ForeignKeyWidget(SampleType, 'code'),
)
sequencing_type = fields.Field(
widget=widgets.ForeignKeyWidget(SequencingType, 'code'),
)
collab_id = fields.Field(
widget=widgets.CharWidget(),
)
class Meta:
model = JIdDetail
all_fields = ( 'jid', 'project_code', 'collab_id',
'sample_type', 'sequencing_type', )
import_id_fields = ( 'jid', )
fields = all_fields
export_order = all_fields
@admin.register(JIdDetail)
# class JIdDetailAdmin(admin.ModelAdmin):
class JIdDetailAdmin(ImportExportModelAdmin):
resource_class = DetailResource
# has_add_permission removes the individual 'add' admin action
# def has_add_permission(self, request):
# return False
form = JIdDetailForm
actions_on_top = False
actions = None
all_fields = ( 'jid', 'project_code', 'collab_id',
'sample_type', 'sequencing_type', )
fields = ( all_fields, )
list_display = all_fields
search_fields = all_fields
readonly_fields = ( 'jid' ),
list_filter = ( 'sample_type', 'sequencing_type', 'project_code' )
ordering = ['creation_date', 'project_code', 'sequencing_type']
forms.py:
class JIdDetailForm(forms.ModelForm):
class Meta:
model = JIdDetail
fields = ( 'jid', 'project_code', 'collab_id',
'sample_type', 'sequencing_type', )
readonly_fields = ( 'jid' ),
# widgets = {
# 'jid': forms.TextInput(attrs={'size':'6'}),
# 'collab_id': forms.TextInput(attrs={'size':'40'}),
# }
models.py
class JIdDetail(models.Model):
verbose_name = 'J Id Detail'
jid = models.CharField('J ID',
max_length=6, blank=False,
help_text="A unique ID string for every sample.",
unique=True,
)
project_code = models.ForeignKey(ProjectCode, to_field='code')
collab_id = models.TextField('Collaborator ID', blank=False,
help_text="Collaborator sample ID."
)
sample_type = models.ForeignKey(SampleType, to_field='code')
sequencing_type = models.ForeignKey(SequencingType, to_field='code')
creation_date = models.DateTimeField(auto_now_add=True)
Any tips on how to troubleshoot this?
Thanks! -Benjamin-
About this issue
- Original URL
- State: closed
- Created 9 years ago
- Comments: 17 (9 by maintainers)
Works very well! Thanks for your assistance! It’s all in the
attribute’s. Need to search docs for them and figure out what they’re used for now. 😃@cometsong you are missing attribute in jid field:
jid = fields.Field( attribute=‘jid’ default=generate_Jid(prefix=‘J’), readonly=True, widget=widgets.CharWidget(), )