Skip to content

Skip virtual fields like GenericForeignKey#28

Merged
craigds merged 1 commit intomasterfrom
cds-fix-genericforeignkey-issue-16
Dec 25, 2025
Merged

Skip virtual fields like GenericForeignKey#28
craigds merged 1 commit intomasterfrom
cds-fix-genericforeignkey-issue-16

Conversation

@craigds
Copy link
Owner

@craigds craigds commented Dec 25, 2025

Fix AttributeError when models have GenericForeignKey fields.

Virtual fields (concrete=False) like GenericForeignKey don't have database columns, causing AttributeError when accessing field.attname. This PR skips them like reverse relations are skipped.

Fixes #16

@craigds craigds marked this pull request as ready for review December 25, 2025 04:49
Copilot AI review requested due to automatic review settings December 25, 2025 04:49
Virtual fields (concrete=False) like GenericForeignKey don't have database
columns, causing AttributeError when accessing field.attname. Skip them like
reverse relations are skipped.

Fixes #16
@craigds craigds force-pushed the cds-fix-genericforeignkey-issue-16 branch from 562107a to 9cdea08 Compare December 25, 2025 04:51
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes an AttributeError that occurs when Django models contain GenericForeignKey or other virtual fields (fields with concrete=False). Virtual fields don't have database columns and lack the attname attribute, causing crashes when the library attempts to track field changes. The fix filters out virtual fields automatically and raises a clear error when they're explicitly requested.

  • Adds is_virtual_field() helper to identify virtual fields by checking the concrete attribute
  • Filters out virtual fields during auto-detection (similar to existing reverse relation filtering)
  • Adds runtime check to skip virtual fields in get_and_update_changed_fields()
  • Provides clear error messages when virtual fields are explicitly requested
  • Adds comprehensive test coverage for virtual field handling

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

File Description
fieldsignals/signals.py Implements virtual field detection and filtering logic to prevent AttributeError when accessing field.attname on GenericForeignKey and similar virtual fields
fieldsignals/tests/test_signals.py Adds VirtualField mock class, FakeModelWithVirtualField test model, and test cases to verify virtual fields are auto-excluded and raise clear errors when explicitly requested

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@craigds craigds merged commit 3368309 into master Dec 25, 2025
5 checks passed
@craigds craigds deleted the cds-fix-genericforeignkey-issue-16 branch December 25, 2025 04:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

GenericForeignKey problem

2 participants