В документции по django есть определение:
Widget - A class that corresponds to an HTML form widget, e.g. <input type=“text”> or <textarea>. This handles rendering of the widget as HTML.
Field - A class that is responsible for doing validation, e.g. an EmailField that makes sure its data is a valid e-mail address.
То есть филд отвечает за тип представления, валидацию и имеет стандарный виджет для отрисовки который можно переопределить.
Виджет - просто отвечает за рендеринг, визуальное представление.
Детальнее про виджеты:
http://docs.djangoproject.com/en/dev/ref/forms/widgets/О том как переопределять стандарные виджети для полей:
http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#overriding-the-default-field-types-or-widgets