Не могу переопределить мой атрибут модели класса resourcers.py - PullRequest
0 голосов
/ 29 ноября 2018

Я использую пакет 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.pyfile:

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 голосов
/ 29 ноября 2018

Решением этой проблемы было просто то, что я искал не ту переменную.Чтобы исправить это и добавить еще один столбец в набор данных, я сделал следующее:

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