2014-09-04 23 views
6

Verilerimi modellerimden birine aktarmaya çalışıyorum, ancak başarısız oluyor, çünkü import-export'un oluşturduğu yinelenen sayı değil, foreignKey kimliğini yüklemeye çalışıyorum.django-import-export öğesine yabancıKey parçacığı ekleniyor

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 

Benim 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) 

Ben SOL modelinden veri verirken, ben, ötelemeli olsun

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

My data.csv okul kimliği için numara. Ben gerçek Okul Kimliği - yabancıKey ilişkiyi tutanı istiyorum. Ve, daha sonra, bu yabancı anahtar numarası ile veri yüklemem gerekir. ForeignKey parçacığının bunu yapmanın bir yolu olduğunu biliyorum, ama nasıl uygulandığını anlamıyorum.

+0

İçe aktarma işlemi sırasında aldığınız hata iletisini gönderir misiniz? –

cevap

3

ben yardımcı olacağını düşündüğümüz:

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 harika çalışıyor kullanın.

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

3

belgelerinde ForeignKeyWidget yoktur. Onu burada kullanabilirsin. Ayrıca IntegerWidget ve DecimalWidget vardır.

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) 

Bu bir çalışma örneğidir. Umarım yardımcı olur.

+0

Bu modelin ne yaptığını açıklayabilir misiniz? –

+0

Bir içe aktarma dışa aktarma işleminde “doğal anahtarlar” kullanarak ilgili modele bakan bir ForeignKey alanı için widget. Arama alanı varsayılan olarak birincil anahtarın (pk) arama kriteri olarak kullanılmasına izin verir, ancak ilgili modelde herhangi bir alanı kullanmak için özelleştirilebilir. Örneğimde, school.pk yerine school.name kullandım. – Jay

+0

Teşekkürler, sadece sınıfın ilk satırında 'alanlar' üzerinde bir hata alıyorum –