我有一个丹麦驾校的模型。当我试图导入它们的形式和.xlsx文件,我得到以下错误:
Errors
Line number: 1 - 'id'
43959328, 2023-03-20, None, Autoskolen.com ApS, Langgade 3 - 4262 Sandved, 4262, Sandved, Anpartsselskab, 855300 Køreskoler, None, None, Nej, None, None, 1
Traceback (most recent call last):
File "C:\PATH\lib\site-packages\import_export\resources.py", line 713, in import_row
instance, new = self.get_or_init_instance(instance_loader, row)
File "C:\PATH\lib\site-packages\import_export\resources.py", line 375, in get_or_init_instance
instance = self.get_instance(instance_loader, row)
File "C:\PATH\lib\site-packages\import_export\resources.py", line 362, in get_instance
import_id_fields = [
File "C:\PATH\lib\site-packages\import_export\resources.py", line 363, in <listcomp>
self.fields[f] for f in self.get_import_id_fields()
KeyError: 'id'
字符串
我正在使用import_export包进行导入。
我的代码看起来像这样:
网址:admin.py
from import_export.admin import ImportExportModelAdmin
from django.contrib import admin
from .models import Koereskoler #Post
class KoereskoleAdmin(ImportExportModelAdmin, admin.ModelAdmin):
...
admin.site.register(Koereskoler, KoereskoleAdmin)
型
网址:models.py
from django.db import models
from datetime import date
from django.core.validators import RegexValidator
from django.utils import timezone
from django.contrib.auth.models import User
def default_user():
return User.objects.get(id=1).pk
class Koereskoler(models.Model):
**CVR_nummer = models.IntegerField(unique=True, primary_key=True, default=00000000)**
startdato = models.DateField(default=timezone.now)
ophoersdato = models.CharField(max_length=255, blank=True, null=True)
navn = models.CharField(max_length=255)
adresse = models.CharField(max_length=255)
postnr = models.IntegerField(default=0000)
by = models.CharField(max_length=50, null=True)
virksomhedsform_type_choices = (
('Enkeltmandsvirksomhed', 'Enkeltmandsvirksomhed'),
('Anpartsselskab', 'Anpartsselskab'),
('Aktie', 'Aktie'),
('Interessentskab', 'Interessentskab'),
('Andelsselskab (-forening) med begrænset ansvar', 'Andelsselskab (-forening) med begrænset ansvar'),
('Selskab med begrænset ansvar', 'Selskab med begrænset ansvar'),
('Personligt ejet Mindre Virksomhed', 'Personligt ejet Mindre Virksomhed'),
('Forening', 'Forening'),
('Forening med begrænset ansvar', 'Forening med begrænset ansvar'),
)
virksomhedsform = models.CharField(blank=True, choices=virksomhedsform_type_choices, max_length=255)
hovedbranche = models.CharField(max_length=50,default=855300)
telefonnr = models.CharField(max_length=20, blank=True, null=True, validators=[RegexValidator('[12345679+/]')])
email = models.EmailField(max_length=255, blank=True, null=True)
reklamebeskyttet_type_choices = (
('Ja', 'Ja'),
('Nej', 'Nej'),
)
reklamebeskyttet = models.CharField(max_length=3, choices=reklamebeskyttet_type_choices)
pris = models.PositiveIntegerField(blank=True,null=True)
url = models.URLField(blank=True, null=True)
owner = models.ForeignKey(User, default=default_user, on_delete=models.SET_DEFAULT, null=False)
def __str__(self):
return self.navn
型
我知道,我没有ID字段,并且我已将默认主键更改为“CVR_nummer”。这个数字是丹麦每家公司都拥有的8位数字。
当从/admin站点手动创建一个对象,并尝试导出它时,它工作正常,并且没有任何id列。当我尝试导入同一个文件时,它会给予我id错误。
问题是,我不知道如何避免错误。
1条答案
按热度按时间oymdgrw71#
所以我想了一下:
在import-export文件夹C:\PATH\Lib\site-packages\import_export\resources.py的资源中的第76行(在我的例子中),如果不是默认的“id”,你必须定义哪个modelfield是PrimaryKey:
Here you can see a screenshot of the resources.py file and the import_id_fields where the new PK is set