Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
A Django library for importing CSVs and other structured data quickly using Django's ModelForm for validation and deserialisation into an instance.
Django Model Import is a light weight CSV importer built for speed.
It uses a standard Django ModelForm
to parse each row, giving you a familiar API to work with
for data validation and model instantiation. In most cases, if you already have a ModelForm
for the ContentType
you are importing you do not need to create an import specific form.
To present feedback to the end-user running the import you can easily generate a preview
of the imported data by toggling the commit
parameter.
It also provides some import optimized fields for ForeignKey's, allowing preloading all possible values, or caching each lookup as it occurs, or looking up a model where multiple fields are needed to uniquely identify a resource.
poetry add django-model-import
import djangomodelimport
class BookImporter(djangomodelimport.ImporterModelForm):
name = forms.CharField()
author = CachedChoiceField(queryset=Author.objects.all(), to_field='name')
class Meta:
model = Book
fields = (
'name',
'author',
)
with default_storage.open('books.csv', 'rb') as fh:
data = fh.read().decode("utf-8")
# Use tablib
parser = djangomodelimport.TablibCSVImportParser(BookImporter)
headers, rows = parser.parse(data)
# Process
importer = djangomodelimport.ModelImporter(BookImporter)
preview = importer.process(headers, rows, commit=False)
errors = preview.get_errors()
if errors:
print(errors)
importresult = importer.process(headers, rows, commit=True)
for result in importresult.get_results():
print(result.instance)
Often a relationship cannot be referenced via a single unique string. For this we can use
a CachedChoiceField
with a CompositeLookupWidget
. The widget looks for the values
under the type
and variant
columns in the source CSV, and does a unique lookup
with the field names specified in to_field
, e.g. queryset.get(type__name=type, name=variant)
.
The results of each get
are cached internally for the remainder of the import minimising
any database access.
class AssetImporter(ImporterModelForm):
site = djangomodelimport.CachedChoiceField(queryset=Site.objects.active(), to_field='ref')
type = djangomodelimport.CachedChoiceField(queryset=AssetType.objects.filter(is_active=True), to_field='name')
type_variant = djangomodelimport.CachedChoiceField(
queryset=InspectionItemTypeVariant.objects.filter(is_active=True),
required=False,
widget=djangomodelimport.CompositeLookupWidget(source=('type', 'variant')),
to_field=('type__name', 'name'),
)
contractor = djangomodelimport.CachedChoiceField(queryset=Contractor.objects.active(), to_field='name')
Often you'll have a OneToOneField or just a ForeignKey to another model, but you want to be able to
create/update that other model via this one. You can flatten all of the related model's fields onto
this importer using FlatRelatedField
.
class ClientImporter(ImporterModelForm):
primary_contact = FlatRelatedField(
queryset=ContactDetails.objects.all(),
fields={
'contact_name': {'to_field': 'name', 'required': True},
'email': {'to_field': 'email'},
'email_cc': {'to_field': 'email_cc'},
'mobile': {'to_field': 'mobile'},
'phone_bh': {'to_field': 'phone_bh'},
'phone_ah': {'to_field': 'phone_ah'},
'fax': {'to_field': 'fax'},
},
)
class Meta:
model = Client
fields = (
'name',
'ref',
'is_active',
'account',
'primary_contact',
)
Run tests with python example/manage.py test testapp
FAQs
A Django library for importing CSVs and other structured data quickly using Django's ModelForm for validation and deserialisation into an instance.
We found that django-model-import demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.