无法覆盖我的resourcers.py类模型属性

时间:2018-11-29 12:03:57

标签: python django django-import-export

我正在使用django-import-export软件包。每当用户发送.csv表时,我都需要在.csv文件中创建一列,并用登录的用户填充每一行。我所做的是:

在我的resources.py文件中:

class ProductListResource(resources.ModelResource):

    class Meta:
        model = ProductList
        skip_unchanged = True
        report_skipped = True
        exclude = ('id',)
        import_id_fields = ('sku',)

在我的models.py文件中:

class ProductList(models.Model):
    sku = models.CharField(primary_key=True, max_length=200)
    client = models.ForeignKey(get_user_model(), default=1, on_delete=models.CASCADE)
    name = models.CharField(max_length=256)
    description = models.CharField(max_length=1000)
    storage = models.CharField(max_length=256)
    cost_price = models.CharField(max_length=256)
    sell_price = models.CharField(max_length=256)
    ncm = models.CharField(max_length=256)
    inventory = models.IntegerField(null=True)

最后在我的views.py文件中:

def simple_upload(request):

    if request.method == 'POST':
        product_resource = ProductListResource()
        product_resource.Meta.model.client = request.user.id
        dataset = Dataset()
        new_product_table = request.FILES['myfile']

        dataset.load(new_product_table.read().decode('utf-8'), format='csv')
        result = product_resource.import_data(dataset, dry_run=True)  # Test the data import

        if not result.has_errors():
            product_resource.import_data(dataset, dry_run=False)  # Actually import now
    context = {'product_list': ProductList.objects.filter(client=request.user.id).all()} #.filter(client=request.user.username)
    return render(request, 'Clientes/import.html', context)

我的问题是,表中的值似乎已更改,但是如果单击对象,则在管理员页面上,所选用户是第一个。

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

该问题的解决方案只是我正在寻找更改错误的变量。要解决此问题并将另一列添加到数据集中,我执行了以下操作:

def simple_upload(request):

    if request.method == 'POST':
        product_resource = ProductListResource()
        dataset = Dataset()
        new_product_table = request.FILES['myfile']

        dataset.load(new_product_table.read().decode('utf-8'), format='csv')

        dataset.append_col([request.user.id]*dataset.height, header='client') # This code add another column to the imported csv.

        result = product_resource.import_data(dataset, dry_run=True)  # Test the data import

        if not result.has_errors():
            product_resource.import_data(dataset, dry_run=False)  # Actually import now
    context = {'product_list': ProductList.objects.filter(client=request.user.id).all()} #.filter(client=request.user.username)
    return render(request, 'Clientes/import.html', context)