#21053: Missing related fields
----------------------------------------------+--------------------
Reporter: joshua.fialkoff@… | Owner: nobody
Type: Uncategorized | Status: new
Component: Database layer (models, ORM) | Version: 1.5
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 0 | UI/UX: 0
----------------------------------------------+--------------------
I have an application with these 4 models (amongst others):
{{{
#!div style="font-size: 80%"
Code highlighting:
{{{#!python
class Note(CaseModel):
name = models.CharField(max_length=100)
notes = models.TextField(blank=True)
@property
def shortened_notes(self):
if len(self.notes) > 100:
return self.notes[:100] + '...'
return self.notes
class Document(CaseModel):
name = models.CharField(max_length=100)
upc = models.CharField(max_length=100, verbose_name="UPC")
file = models.FileField(upload_to="prvate/documents/")
notes = models.TextField(blank=True)
@property
def shortened_notes(self):
if len(self.notes) > 100:
return self.notes[:100] + '...'
return self.notes
class NoteAttachTo(AttachTo):
class Meta:
verbose_name = 'Attach To'
verbose_name_plural = 'Attach to'
unique_together = ('note', 'attach_to_type', 'attach_to_id')
note = models.ForeignKey(Note)
class DocumentAttachTo(AttachTo):
class Meta:
verbose_name = 'Attach To'
verbose_name_plural = 'Attach to'
unique_together = ('document', 'attach_to_type', 'attach_to_id')
document = models.ForeignKey(Document)
}}}
}}}
`AttachTo` and `CaseModel` are abstract base models with fields that are
common to their subclasses. Note that `Note` and `Document` are
essentially copies of each other. However, while `Note` has the related
field `noteattachto`, `Document` does not have `documentattachto`:
{{{
#!div style="font-size: 80%"
Code highlighting:
{{{#!python
In [1]: from cases.models import Note, Document
In [2]: Note._meta.get_all_field_names()
Out[2]: ['case', u'id', 'name', 'noteattachto', 'notes']
In [3]: Document._meta.get_all_field_names()
Out[3]: ['case', 'file', u'id', 'name', 'notes', 'upc']
}}}
}}}
I tried to debug this a bit and added a `print` statement in
db/models/options.py - `_fill_related_objects_cache`:
{{{
#!div style="font-size: 80%"
Code highlighting:
{{{#!python
#### Starting on line 438 of db/models/options.py
# Collect also objects which are in relation to some proxy
child/parent of self.
proxy_cache = cache.copy()
for klass in get_models(include_auto_created=True,
only_installed=False):
print(self.db_table + ': ' + klass.__name__)
if not klass._meta.swapped:
for f in klass._meta.local_fields:
...
}}}
}}}
The relevant output is below. Note that, when the model cache is being
built for `Document`, neither `DocumentAttachTo` or `NoteAttachTo` are
available. Those models do, however, become available immediately after
"Validating models..." is printed to the screen. At this point, I'm not
really sure what's going on.
{{{
django_content_type: ContentType
django_content_type: Permission
django_content_type: Group_permissions
django_content_type: Group
django_content_type: User_groups
django_content_type: User_user_permissions
django_content_type: User
django_content_type: Site
django_content_type: Case
django_content_type: Debtor
django_content_type: Claim_debtors
django_content_type: Claim
django_content_type: Note
django_content_type: Document
django_content_type: PartyRole
django_content_type: Party
django_content_type: Contact
django_content_type: CourtProceeding
django_content_type: Session
django_content_type: LogEntry
django_content_type: MigrationHistory
cases_claim: ContentType
cases_claim: Permission
cases_claim: Group_permissions
cases_claim: Group
cases_claim: User_groups
cases_claim: User_user_permissions
cases_claim: User
cases_claim: Site
cases_claim: Case
cases_claim: Debtor
cases_claim: Claim_debtors
cases_claim: Claim
cases_claim: Note
cases_claim: Document
cases_claim: PartyRole
cases_claim: Party
cases_claim: Contact
cases_claim: CourtProceeding
cases_claim: Session
cases_claim: LogEntry
cases_claim: MigrationHistory
cases_document: ContentType
cases_document: Permission
cases_document: Group_permissions
cases_document: Group
cases_document: User_groups
cases_document: User_user_permissions
cases_document: User
cases_document: Site
cases_document: Case
cases_document: Debtor
cases_document: Claim_debtors
cases_document: Claim
cases_document: Note
cases_document: Document
cases_document: PartyRole
cases_document: Party
cases_document: Contact
cases_document: CourtProceeding
cases_document: Session
cases_document: LogEntry
cases_document: MigrationHistory
Validating models...
auth_permission: ContentType
auth_permission: Permission
auth_permission: Group_permissions
auth_permission: Group
auth_permission: User_groups
auth_permission: User_user_permissions
auth_permission: User
auth_permission: Site
auth_permission: Case
auth_permission: Debtor
auth_permission: Claim_debtors
auth_permission: Claim
auth_permission: Note
auth_permission: Document
auth_permission: PartyRole
auth_permission: Party
auth_permission: Contact
auth_permission: CourtProceeding
auth_permission: NoteAttachTo
auth_permission: DocumentAttachTo
auth_permission: Session
auth_permission: LogEntry
auth_permission: MigrationHistory
cases_note: ContentType
cases_note: Permission
cases_note: Group_permissions
cases_note: Group
cases_note: User_groups
cases_note: User_user_permissions
cases_note: User
cases_note: Site
cases_note: Case
cases_note: Debtor
cases_note: Claim_debtors
cases_note: Claim
cases_note: Note
cases_note: Document
cases_note: PartyRole
cases_note: Party
cases_note: Contact
cases_note: CourtProceeding
cases_note: NoteAttachTo
cases_note: DocumentAttachTo
cases_note: Session
cases_note: LogEntry
cases_note: MigrationHistory
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/21053>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/070.02272d751ad68b93f932f3b56b8d2765%40djangoproject.com.
For more options, visit https://groups.google.com/groups/opt_out.