Я пытаюсь импортировать некоторые данные из файла csv в базу данных django, используя django -import-export, с внешним ключом (местоположение). Я хочу добиться того, чтобы location_id передавался URL-адресом запроса.
value,datetime,location
4.46,2020-01-01,1
4.46,2020-01-02,1
Мои URL-адреса выглядят так, поэтому я хочу, чтобы "location_id" передавался в загруженный файл csv:
urlpatterns = [
...
...
path('..../<int:location_id>/upload', views.simple_upload, name='upload'),
]
Мое представление выглядит так:
def simple_upload(request, location_id):
if request.method == 'POST':
rainfall_resource = RainfallResource()
dataset = Dataset()
new_rainfall = request.FILES['myfile']
imported_data = dataset.load(new_rainfall.read().decode("utf-8"), format="csv")
try:
result = rainfall_resource.import_data(dataset, dry_run=True) # Test the data import
except Exception as e:
return HttpResponse(e, status=status.HTTP_400_BAD_REQUEST)
if not result.has_errors():
rainfall_resource.import_data(dataset, dry_run=False) # Actually import now
return render(request, '/import.html')
Мой ModelResource выглядит так:
class RainfallResource(resources.ModelResource):
location_id = fields.Field(
column_name='location_id',
attribute='location_id',
widget=ForeignKeyWidget(Location, 'Location'))
class Meta:
model = Rainfall
def before_import_row(self, row, **kwargs):
row['location'] = location_id
Манипуляция работает, когда я жестко кодирую "location_id", например:
def before_import_row(self, row, **kwargs):
row['location'] = 123
Однако я не понимаю, как передать аргумент location_id из «url» в функцию «before_import_row». Помощь будет очень признательна: -)