About Django's widget design principles
A widget makes no sense in the absence of a field. The field is responsible for accepting the input and validating it; so it is the field that has to determine the name attribute, otherwise it would have no way of knowing what value to use in the data.
Butu you should never need to render the widget directly by calling its render method. Again, that is the job of the field.
This is a question I've from time ago, as I just don't understand why was this decission headed that way.
When we render a widget (e.g., 'cause of using a form), its render functions has a name arg. Why, if a HTML tag name is an attr, cannot be specified as part of the attrs dict passed to that function? Should make more sense to use name only when you no specify an attr name.
For understanding, if I set an attrs {"name": "no_one_knows[]"}, when I render the widget its name should be "no_one_knows[]", not the one passed by arg. That way I could have a HTML tag that can be parsed directly as a list (getlist(..)) in the server side (for example).