API¶
Functions¶
export_as_csv¶
See also
Are you looking for the Export as CSV action? .
-
adminactions.api.
export_as_csv
()¶
Exports a queryset as csv from a queryset with the given fields.
Defaults
Warning
Due a mistake the default configuration of export_as_csv is not csv but semicolon-csv
csv_options_default = {'date_format': 'd/m/Y',
'datetime_format': 'N j, Y, P',
'time_format': 'P',
'header': False,
'quotechar': '"',
'quoting': csv.QUOTE_ALL,
'delimiter': ';',
'escapechar': '\\', }
Usage examples
Returns HttpResponse
:
response = export_as_csv(User.objects.all())
Write to file
>>> users = export_as_csv(User.objects.all(), out=open('users.csv', 'w'))
>>> users.close()
Write to buffer
>>> users = export_as_csv(User.objects.all(), out=StringIO())
>>> with open('users.csv', 'w') as f:
f.write(users.getvalue())
Export with callable
>>> fields = ['username', 'get_full_name']
>>> export_as_csv(User.objects.all(), fields=fields, out=sys.stdout)
"sax";"FirstName 9 LastName 9"
"user_0";"FirstName 0 LastName 0"
"user_1";"FirstName 1 LastName 1"
Export with dictionaries
>>> fields = ['codename', 'content_type__app_label']
>>> qs = Permission.objects.filter(codename='add_user').values('codename', 'content_type__app_label')
>>> __ = export_as_csv(qs, fields=fields, out=sys.stdout)
"add_user";"auth"
merge¶
See also
See Merge Records action for additional notes.
Merge ‘other’ into master.
fields
is a list of fieldnames that must be read fromother
to put into master. Iffields
is Nonemaster
will get all theother
values except primary_key. Finallyother
will be deleted and master will be preserved
Custom validation¶
If you need to disable validation for some fields, it is possible to set parameter merge_form
to a subclass of :class:adminactions.merge.MergeForm and change the validation there.
class CompanyMergeForm(merge.MergeForm):
class Meta:
model = models.Company
fields = "__all__"
def full_clean(self):
super().full_clean()
if 'address_psc' in self._errors:
del self._errors['address_psc']
class CompanyAdmin(city_admin_mixin_generator(admin.ModelAdmin):
form = CompanyForm
merge_form = CompanyMergeForm
Filename callbacks¶
To use custom names for yours exports simply implements get_export_<TYPE>_filename
in your Modeladmin
class, these must return a string that will be used as filename
in the SaveAs dialog box of the browser
example:
class UserAdmin(ModelAdmin):
def get_export_as_csv_filename(request, queryset):
if 'isadmin' in request.GET
return 'administrators.csv'
else:
return 'all_users.csv'
Available callbacks:
get_export_as_csv_filename
get_export_as_fixture_filename
get_export_delete_tree_filename
Utils¶
-
adminactions.utils.
clone_instance
(instance, fieldnames=None)[source]¶ - returns a copy of the passed instance.
Parameters: instance – django.db.models.Model
instanceReturns: django.db.models.Model
instance
-
adminactions.utils.
get_field_by_path
(model, field_path)[source]¶ get a Model class or instance and a path to a attribute, returns the field object
Parameters: - model –
django.db.models.Model
- field_path – string path to the field
Returns: >>> from django.contrib.auth.models import Permission
>>> p = Permission(name='perm') >>> get_field_by_path(Permission, 'content_type').name 'content_type' >>> p = Permission(name='perm') >>> get_field_by_path(p, 'content_type.app_label').name 'app_label'
- model –
-
adminactions.utils.
get_field_value
(obj, field, usedisplay=True, raw_callable=False)[source]¶ returns the field value or field representation if get_FIELD_display exists
Parameters: - obj –
django.db.models.Model
instance - field –
django.db.models.Field
instance orbasestring
fieldname - usedisplay – boolean if True return the get_FIELD_display() result
Returns: field value
>>> from django.contrib.auth.models import Permission >>> p = Permission(name='perm') >>> get_field_value(p, 'name') == 'perm' True >>> get_field_value(p, None) Traceback (most recent call last): ... ValueError: Invalid value for parameter `field`: Should be a field name or a Field instance
- obj –
-
adminactions.utils.
get_verbose_name
(model_or_queryset, field)[source]¶ returns the value of the
verbose_name
of a fieldtypically used in the templates where you can have a dynamic queryset
Parameters: - model_or_queryset (
django.db.models.Model
,django.db.query.Queryset
) – target object - field (
django.db.models.Field
, basestring) – field to get the verbose name
Returns: translated field verbose name
Return type: unicode
Valid uses:
>>> from django.contrib.auth.models import User, Permission >>> user = User() >>> p = Permission() >>> get_verbose_name(user, 'username') == 'username' True >>> get_verbose_name(User, 'username') == 'username' True >>> get_verbose_name(User.objects.all(), 'username') == 'username' True >>> get_verbose_name(User.objects, 'username') == 'username' True >>> get_verbose_name(User.objects, user._meta.fields[0]) == 'ID' True >>> get_verbose_name(p, 'content_type.model') == 'python model class name' True
- model_or_queryset (
Templatetags¶
templatetag wrapper to adminactions.utils.get_verbose_name
returns the representation (value or
get_FIELD_display()
) of a field