我正在使用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)
我的问题是,表中的值似乎已更改,但是如果单击对象,则在管理员页面上,所选用户是第一个。
答案 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)