2017-09-26 75 views
1

我有一個棘手的問題。我使用django-import-export 來導入xlsx數據。我已經通過ImportExportModelAdmin將它集成到Django admin。下面是admin.py:Django import-export.admin自定義:對於xlsx工作表,並更改差異策略

@admin.register(assets) 
class data_import(ImportExportModelAdmin): 
    pass 

但是,當我輸入數據好幾次,我發現它只是保存最新的數據(最後)的模型,我希望每次我導入時間保存所有數據,並且只使用一些列來決定數據是否重複。我可以如何解決這個問題?
model.py:

class station(models.Model): 
    station_name = models.CharField(max_length=100, verbose_name='Astation') 

class assets(model.Model): 
    name = models.CharField(max_length = 200, verbose_name = 'Aname') 
    sn = models.CharField(max_length=200, verbose_name='Asn', default=None) 
    ip_address = models.GenericIPAddressField(u'IP', blank=True, null=True) 
    station = models.ForeignKey(station) 

回答

0

您可以創建一個資源類和重寫get_instance方法和返回False總是

from import_export import resources, fields 
from import_export.widgets import ForeignKeyWidget 

class DataResource(resources.ModelResource): 
    # UPDATE 
    # If model has ForeignKey 
    station = fields.Field(widget=ForeignKeyWidget(station, 'id')) 

    def get_instance(self, instance_loader, row): 
     # Returning False prevents us from looking in the 
     # database for rows that already exist 
     return False 

    class Meta: 
     model = assets # class name should be camelcase 
     fields = '__all__' # If all column of table present in xlsx otherwise mention fields name. 

@admin.register(assets) 
class data_import(ImportExportModelAdmin): 
    resource_class = DataResource 
+0

謝謝,但沒有奏效。第一個文件導入10個數據,然後導入第二個包含5個新數據的文件,最後只是我的數據庫中新的5個數據, – JLOGAN

+1

用Model代碼更新了您的問題,您是否指定了任何字段unique = True? – Satendra

+0

好的,沒有任何字段唯一 – JLOGAN