2014-09-04 15 views
6

Sto cercando di importare i dati su uno dei miei modelli, ma non funziona perché sto tentando di caricare l'ID foreignKey, non il numero iterato creato da import-export.Aggiunta del widget foreignKey a django-import-export

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 

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

mio data.csv

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

Quando ho esportare i dati dal modello SOL, ottengo un iterata numero per l'ID della scuola. Voglio il vero ID della scuola, quello che mantiene la relazione ForeignKey. E, successivamente, ho bisogno di caricare i dati con quel numero ForeignKey. So che il widget ForeignKey è il modo per farlo, ma non capisco come è implementato.

+0

Puoi pubblicare il messaggio di errore che stai ricevendo durante il processo di importazione? –

risposta

3

penso che vi aiuterà:

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

Utilizzare la widget- grandi opere.

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

3

C'è ForeignKeyWidget nella documentazione. Puoi usarlo qui. Esistono anche IntegerWidget e 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) 

Questo è un esempio di lavoro. Spero che ti sarà d'aiuto.

+0

Puoi spiegare cosa fa questo eample? –

+0

Widget per un campo ForeignKey che ricerca un modello correlato utilizzando "chiavi naturali" in entrambe le esportazioni e un'importazione. Il campo di ricerca utilizza per impostazione predefinita la chiave primaria (pk) come criterio di ricerca, ma può essere personalizzato per utilizzare qualsiasi campo sul modello correlato. Nel mio esempio ho usato school.name invece di school.pk. – Jay

+0

Grazie, ho appena ricevuto un errore sui "campi" nella prima riga della classe –

Problemi correlati