Changes between Version 165 and Version 166 of BackwardsIncompatibleChanges

06/26/2008 10:36:41 PM (10 years ago)
Malcolm Tredinnick

documented internal where-node changes in 7773.


  • BackwardsIncompatibleChanges

    v165 v166  
    5656 * [7477] April 27, 2008 [#Queryset-refactormerge Queryset-refactor merge]
    5757 * [7574] June 4, 2008 [#TightenedupForeignKeyassignment Tightened up ForeignKey assignment]
     58 * [7773] June 26, 2008 [#ChangedWhereNodeinternals Changed Where node internals]
    5960== Database constraint names changed ==
    601602  * Raise a {{{ValueError}}} if you try to assign {{{None}}} to a field not specified with {{{null=True}}}.
    602603  * Cache the set value at set time instead of just at lookup time. This avoids race conditions when saving related objects along with their parents and was the original impetus for the change (see #6886).
     605== Change Where node internals ==
     606For anybody writing custom Q-like objects or advanced filter additions with the !QuerySet class, [7773] changed the information that is passed to the Where class by default. A standard leaf node in the Where class used to be
     610[table_alias, field_name, field_instance, lookup_type, value]
     613This changeset removed the need to store any field instances (in `field_instance`) or model references (in the `value`). The new list in the leaf nodes is now
     617[table_alias, field_name, db_type, lookup_type, value_annotation, params]
     620The `db_type` is the result of `field.db_type()` or `None` if `field` was None previously. The `value_annotation` is usually `bool(value)`, but it is `datetime.datetime` if the previous `value` was a datetime. Finally, `params` is the result of `value.db_prep_lookup()` or equivalent and must be a sequence (so if you're passing in a value directly, wrap it in a list or a tuple).
     622Again, this will not affect most code, but people writing customised things will need to adjust. Fortunately, since the list is now one component longer, if you miss a change, your code will fail drastically so you will notice.
Back to Top