Sunday, July 4, 2021

Django Model what are widgets

A Widget takes care of converting between import and export representations.

This is achieved by the two methods, clean() and render().


clean(valuerow=None*args**kwargs)

Returns an appropriate Python object for an imported value.

For example, if you import a value from a spreadsheet, clean() handles conversion of this value into the corresponding Python object.

Numbers or dates can be cleaned to their respective data types and don’t have to be imported as Strings.



render(valueobj=None)

Returns an export representation of a Python value.

For example, if you have an object you want to export, render() takes care of converting the object’s field to a value that can be written to a spreadsheet.



The different types of available widgets are:


import_export.widgets.IntegerWidget

import_export.widgets.DecimalWidget

import_export.widgets.CharWidget

import_export.widgets.BooleanWidget

import_export.widgets.DateWidget

import_export.widgets.TimeWidget

import_export.widgets.DateTimeWidget

import_export.widgets.DurationWidget

import_export.widgets.JSONWidget

import_export.widgets.ForeignKeyWidget


Unlike specifying a related field in your resource like so

class Meta:

    fields = ('author__name',)



…using a ForeignKeyWidget has the advantage that it can not only be used for exporting, but also importing data with foreign key relationships.


from import_export import fields, resources

from import_export.widgets import ForeignKeyWidget


class BookResource(resources.ModelResource):

    author = fields.Field(

        column_name='author',

        attribute='author',

        widget=ForeignKeyWidget(Author, 'name'))


    class Meta:

        fields = ('author',)



References:

https://django-import-export.readthedocs.io/en/latest/api_widgets.html

No comments:

Post a Comment