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:
@ -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
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user