1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Fixes #422: Added ability to encapsulate within double quotes values which contain commas

This commit is contained in:
Jeremy Stretch
2016-08-03 17:33:15 -04:00
parent 72690bfd0a
commit 7944ee6419

View File

@ -1,3 +1,4 @@
import csv
import re import re
from django import forms from django import forms
@ -118,7 +119,8 @@ class Livesearch(forms.TextInput):
class CSVDataField(forms.CharField): class CSVDataField(forms.CharField):
""" """
A field for comma-separated values (CSV) A field for comma-separated values (CSV). Values containing commas should be encased within double quotes. Example:
'"New York, NY",new-york-ny,Other stuff' => ['New York, NY', 'new-york-ny', 'Other stuff']
""" """
csv_form = None csv_form = None
@ -136,16 +138,16 @@ class CSVDataField(forms.CharField):
def to_python(self, value): def to_python(self, value):
# Return a list of dictionaries, each representing an individual record # Return a list of dictionaries, each representing an individual record
records = [] records = []
for i, row in enumerate(value.split('\n'), start=1): reader = csv.reader(value.splitlines())
if row.strip(): for i, row in enumerate(reader, start=1):
values = row.strip().split(',') if row:
if len(values) < len(self.columns): if len(row) < len(self.columns):
raise forms.ValidationError("Line {}: Field(s) missing (found {}; expected {})" raise forms.ValidationError("Line {}: Field(s) missing (found {}; expected {})"
.format(i, len(values), len(self.columns))) .format(i, len(row), len(self.columns)))
elif len(values) > len(self.columns): elif len(row) > len(self.columns):
raise forms.ValidationError("Line {}: Too many fields (found {}; expected {})" raise forms.ValidationError("Line {}: Too many fields (found {}; expected {})"
.format(i, len(values), len(self.columns))) .format(i, len(row), len(self.columns)))
record = dict(zip(self.columns, values)) record = dict(zip(self.columns, row))
records.append(record) records.append(record)
return records return records