Code

#20089 closed New feature (wontfix)

Give reference from widget to its field

Reported by: ram@… Owned by: nobody
Component: Forms Version: master
Severity: Normal Keywords:
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

I needed to do some customization of Django's forms, and I needed a way to get the field belonging to a widget. It would have helped if Widget had a .field attribute.

Attachments (0)

Change History (3)

comment:1 Changed 16 months ago by timo

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset
  • Resolution set to needsinfo
  • Status changed from new to closed

I'm not sure what you're looking to do can't be done with the existing design. How do you have access to the widget but not the field?

comment:2 Changed 16 months ago by coolRR

  • Resolution needsinfo deleted
  • Status changed from closed to new

I was monkeypatching a method on the Widget, and the function I was adding needed to access the field.

I know monkeypatching is considered bad, but I think we shouldn't make people's lives hard when they try to do it.

comment:3 Changed 16 months ago by carljm

  • Resolution set to wontfix
  • Status changed from new to closed

It's not monkeypatching that's bad so much in this case, it's turning a unidirectional dependency (a field needs a widget) into a bidirectional dependency (a field needs a widget and a widget needs a field). Bidirectional dependencies are a sign of overly-coupled code that's violating separation of layers, and it makes the code harder to test and maintain. If every widget knew about "its field" (a concept that currently does not exist; widgets can exist independently), now you can't even instantiate a widget for independent testing without providing a field too.

Instead of thinking "this widget needs to know about its field", consider what specific piece of information your widget actually needs, and pass that information in in its constructor. If that's not possible, then it's likely you are writing code at the widget level that belongs at the field level instead. Hard to be more specific without seeing the actual code you were trying to write.

Add Comment

Modify Ticket

Change Properties
<Author field>
Action
as closed
as The resolution will be set. Next status will be 'closed'
The resolution will be deleted. Next status will be 'new'
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.