我目前正在做一个Django项目,我正在使用django-import-export库通过Django管理界面将CSV数据导入到我的模型中。我已经在管理界面中设置了资源,模型并进行了必要的更改,但在导入过程中我面临验证错误。
我在Django项目中有以下结构:
models.py:包含各种模型的定义,如PlayStyles、Coaches、Stadium、Leagues、Teams、Players、Matches和Statistics。
resources.py:包含每个模型的相应ModelResource类。
admin.py:配置Django管理界面以使用ModelResource类进行数据导入/导出。
CSV文件:我有CSV文件为每个模型与数据导入。
尽管正确设置了资源,但我在为某些模型导入CSV文件时遇到了问题,特别是对于Teams。错误消息提到了与外键字段(体育场,教练和联赛)相关的验证错误。
下面是我的相关代码片段:models.py:
# ... (models for PlayStyles, Coaches, Stadiums, Leagues, etc.)
class Teams(models.Model):
name = models.CharField(max_length=100)
established_year = models.IntegerField()
stadium = models.ForeignKey(Stadiums, on_delete=models.CASCADE)
coach = models.ForeignKey(Coaches, on_delete=models.CASCADE)
league = models.ForeignKey(Leagues, on_delete=models.CASCADE)
number_of_titles = models.IntegerField()
字符串
resources.py:
# ... (resources for PlayStyles, Coaches, Stadiums, Leagues, etc.)
class TeamsResource(resources.ModelResource):
class Meta:
model = Teams
fields = ('name', 'established_year', 'stadium', 'coach', 'league', 'number_of_titles')
型
admin.py:
# ... (admin configurations for PlayStyles, Coaches, Stadiums, Leagues, etc.)
class TeamsAdmin(admin.ModelAdmin):
list_display = ('name', 'established_year', 'stadium', 'coach', 'league', 'number_of_titles')
resource_class = TeamsResource
admin.site.register(Teams, TeamsAdmin)
型
csv文件teams.csv:
name,established_year,stadium,coach,league,number_of_titles
TeamA,1990,Old Trafford,Jurgen Klopp,Premier League,5
TeamB,1985,Camp Nou,Pep Guardiola,La Liga,3
型
我怀疑这个问题与我在导入过程中如何处理外键字段有关。如果有任何关于解决这个问题的指导,我将不胜感激。
1条答案
按热度按时间bxpogfeg1#
您可以在导入中使用任何字段作为ForeignKey引用。它不必是主键,但必须正确声明
ForeignKeyWidget
。举例来说:
字符串
这将允许您导入Team对象,并根据导入文件中的体育场名称将其链接到正确的体育场示例。
体育场示例必须已经存在,并且必须通过名称唯一标识。如果不存在,您可以配置django-import-export来创建FK关系。请参阅文档。
显然,您需要根据上面的示例调整您的实现。