2014-09-04 3 views
6

내 모델 중 하나로 데이터를 가져 오려고하는데 가져 오기 내보내기가 생성하는 반복 번호가 아니라 foreignKey Id를 업로드하려고하기 때문에 실패합니다.django-import-export에 foreignKey 위젯 추가하기

models.py

from django.db import models 
from import_export import resources 


class School(models.Model): 
    name = models.CharField(max_length=100) 
    slug = models.CharField(max_length=100) 
    school_id = models.IntegerField(unique=True) 

class Sol(models.Model): 
    school_id = models.ForeignKey(School, to_field='school_id') 
    name = models.CharField(max_length = 100) 
    Al1EOC = models.DecimalField(max_digits=5, decimal_places=2) 
    AL2EOC = models.DecimalField(max_digits=5, decimal_places=2) 

#Class for django-import-export 
class SolResource(resources.ModelResource): 
    class Meta: 
     model = Sol 

내 admin.py

from import_export.admin import ImportExportModelAdmin 


class SolAdmin(ImportExportModelAdmin): 
    list_display = ('name', 'school_id') 
    resources_class = SolResource 
    pass 

admin.site.register(Sol, SolAdmin) 

나는 SOL 모델에서 데이터를 내보낼 때, 내가 반복 된 얻을

id, name, school_id, Al1EOC, AL2EOC 
,'Main st school', 1238008, 12.9, 14.9 

내 data.csv 학교 ID 번호. foreignKey 관계를 보유하고있는 실제 학교 ID를 원합니다. 그리고 나서, 그 foreignKey 번호로 데이터를 업로드해야합니다. ForeignKey 위젯이이를 수행하는 방법이지만, 구현 방법을 이해하지 못한다.

+0

가져 오기 프로세스 중에 나타나는 오류 메시지를 게시 할 수 있습니까? –

답변

3

는 내가 그것을 도움이 될 것입니다 생각 :

class SolResource(resources.ModelResource): 
    school_id = fields.Field() 

    class Meta: 
     # ... 

    def dehydrate_school_id(self, sol): 
     return sol.school_id.school_id # You can get all fields of related model. This is example. 
3

가 widget-가 잘 작동합니다.

school_id = fields.Field(column_name='school_id', attribute='Sol', widget=widgets.ForeignKeyWidget(Sol, 'school_id'))

3

는 문서에 ForeignKeyWidget 있습니다. 여기에서 사용할 수 있습니다. IntegerWidget 및 DecimalWidget도 있습니다.

from import_export.admin import ImportExportModelAdmin 

class SolResource(resources.ModelResource): 
    school_id = fields.Field(
     column_name='school_id', 
     attribute='school_id', 
     widget=ForeignKeyWidget(School, 'name')) 

    class Meta: 
     model = Sol 

class SolAdmin(ImportExportModelAdmin): 
    list_display = ('name', 'school_id') 
    resources_class = SolResource 

admin.site.register(Sol, SolAdmin) 

이것은 실제 예입니다. 희망이 도움이 될 것입니다.

+0

이 샘플은 무엇을 설명 할 수 있습니까? –

+0

가져 오기를 내보낼 때 "자연 키"를 사용하여 관련 모델을 조회하는 ForeignKey 필드의 위젯입니다. 조회 필드는 기본적으로 조회 기준으로 기본 키 (pk)를 사용하지만 관련 모델의 필드를 사용하도록 사용자 정의 할 수 있습니다. 나의 예에서는 school.pk 대신에 school.name을 사용했다. – Jay

+0

고마워, 난 그냥 클래스의 첫 번째 줄에서 '필드'에 오류가 발생합니다 –