Форум сайта python.su
Здравствуйте мне нужно сделать импорт csv со связями FK. Но я то получаю нужное поле пустым либо такую ошибку
Line number: 1 - Column ‘city’: invalid literal for int() with base 10: ‘Moskow’. вот мой код
from __future__ import unicode_literals from django.db import models class Location(models.Model): name = models.CharField('name', max_length=100) iata = models.CharField('iata', max_length=100) oon = models.CharField('oon', max_length=100) typelocation = models.CharField('typelocation', max_length=100) ngrad = models.IntegerField(blank=True, null=True) nmin = models.IntegerField(blank=True, null=True) wgrad = models.IntegerField(blank=True, null=True) wmin = models.IntegerField(blank=True, null=True) typetime = models.CharField('typetime', max_length=100) class Meta: abstract = True class City(models.Model): name = models.CharField('name', max_length=100) def __unicode__(self): return self.name class Contry(models.Model): name = models.CharField('name', max_length=100) def __unicode__(self): return self.name class Airport(Location): city = models.ForeignKey(City, related_name='city', blank=True, null=True) contry = models.ForeignKey(Contry, related_name='contry', blank=True, null=True) def __unicode__(self): return self.name
from django.contrib import admin from import_export import fields,widgets from import_export.widgets import ForeignKeyWidget from import_export.admin import ImportExportModelAdmin from import_export.admin import ImportExportActionModelAdmin from import_export.admin import ImportMixin, ExportMixin from django.contrib.admin import DateFieldListFilter from import_export import resources, fields from import_export import resources from .models import City, Airport, Contry class StoreWidget(widgets.ForeignKeyWidget): def clean(self, value): return self.model.objects.get_or_create(city = value)[0] class Cityresources(resources.ModelResource): city = fields.Field(column_name='city', attribute='City', widget=StoreWidget(City, 'city')) class Meta: model = Airport fields = ('city','name') def get_instance(self, instance_loader, row): # Returning False prevents us from looking in the # database for rows that already exist return False class AirportAdmin(ImportMixin,admin.ModelAdmin): resource_class = Cityresources fieldsets = [ ('name', {'fields':['name']}), ('city', {'fields':['city']}), ('contry', {'fields':['contry']}), ('iata', {'fields':['iata']}), ('oon', {'fields':['oon']}), ('ngrad', {'fields':['ngrad']}), ('nmin', {'fields':['nmin']}), ('wgrad', {'fields':['wgrad']}), ('wmin', {'fields':['wmin']}), ('typetime', {'fields':['typetime']}), ] admin.site.register(Airport, AirportAdmin) admin.site.register(Contry) admin.site.register(City)
Офлайн
serrrgggeeeне могу увидеть, где в вашем коде csv
Здравствуйте мне нужно сделать импорт csv со связями FK
Офлайн
ну вообще данные передаются с админки, вот все происходит в этом классе Cityresources
Офлайн
serrrgggeee
Я правда не понимаю. Вы пишите
Здравствуйте мне нужно сделать импорт csv со связями FK.Вы можете показать, в каком месте у вас происходит импорт в csv?
Офлайн
class Cityresources(resources.ModelResource): city = fields.Field(column_name='city', attribute='City', widget=StoreWidget(City, 'city')) class Meta: model = Airport fields = ('city','name') def get_instance(self, instance_loader, row): # Returning False prevents us from looking in the # database for rows that already exist return False
Офлайн
serrrgggeeeДайте ссылку на документацию Джанго, описывающую этот миксин.
нужно проипсать
class AirportAdmin(ImportMixin,admin.ModelAdmin):
Офлайн
Офлайн
Я понял что тут ответа я не дождусь, я почти получил то что мне нужно, только вот в модели FK есть два поля, если я делаю инсерт в одно поле то проблем нет, а если в два то етсь, не получается сделать вставку одновременно, а только в одной строке одно поле, а в другой другое, вот мой код
class PlaceWidget(widgets.ForeignKeyWidget): def clean(self, value): return self.model.objects.get_or_create(name = value)[0] def after_import(dataset, result, dry_run, **kwargs): return self.model.objects.get_or_create(continent = value)[0] class Placeresources(resources.ModelResource): #city = fields.Field(column_name='city', attribute='city', widget=PlaceWidget(City, 'name')) country = fields.Field(column_name='country', attribute='country', widget=PlaceWidget(Country, 'name')) continent = fields.Field(column_name='continent', attribute='continent', widget=PlaceWidget(Country, 'continent')) #name = fields.Field(attribute='name',column_name='name') class Meta: model = Airport fields = ('name','country','oon','iata','ngrad', 'nmin', 'wgrad', 'wmin', 'typetime') export_order = fields skip_unchanged = True report_skipped = False def get_instance(self, instance_loader, row): # Returning False prevents us from looking in the # database for rows that already exist return False class AirportAdmin(ImportExportActionModelAdmin,admin.ModelAdmin): resource_class = Placeresources fieldsets = [ ('name', {'fields':['name']}), ('city', {'fields':['city']}), ('country', {'fields':['country']}), ('iata', {'fields':['iata']}), ('oon', {'fields':['oon']}), ('ngrad', {'fields':['ngrad']}), ('nmin', {'fields':['nmin']}), ('wgrad', {'fields':['wgrad']}), ('wmin', {'fields':['wmin']}), ('typetime', {'fields':['typetime']}), ] admin.site.register(Airport, AirportAdmin)
Офлайн
serrrgggeeeВам понадобились сутки, чтобы наконец-то после многочисленных просьб и уговоров посвятить сообщество в тайны своего кода и сообщить, какую-же стороннюю батарейку вы к нему прикрутили. Как задаете вопрос, такую реакцию и получаете.
Я понял что тут ответа я не дождусь,
Офлайн
сейчас решают такую задачу , вот здесь
country = fields.Field(column_name='country', attribute='country', widget=PlaceWidget(Country, 'name'))
def clean(self, value): return self.model.objects.get_or_create(name = value)[0]
def clean(self, value): return self.model.objects.get_or_create(name = value, continent=continent)[0]
Офлайн