Opened 16 years ago

Last modified 16 years ago

#10075 closed

model inheritance with foreign key problem — at Initial Version

Reported by: marcominutoli@… Owned by: nobody
Component: Forms Version: 1.0
Severity: Keywords: model inheritance foreign key
Cc: raffaele.salmaso@… Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

I have these three models:

class Address(models.Model):

name = models.CharField(max_length=100)
## many other fields ##

class Meta:

ordering = ('name',)

def unicode(self):

return self.name

class Organization(models.Model):

name = models.CharField(max_length=100)
## many other fields ##

class Meta:

ordering = ('name',)

def unicode(self):

return self.name

class OrganizationAddress(Address):

organization = models.ForeignKey (

Organization,
related_name = "addresses",

)

When i try to add/edit an organization and add one address i've got this error:

" ValueError: Cannot assign None: "OrganizationAddress.address_ptr" does not allow null values. "

I've tried to understand the problem (because it happened since one day to another..) and i've found that the problem was born after the django commit of the changeset 9664.

This is the "incriminated code" of changeset:

488 if fk_attname == self._pk_field.attname:

489 exclude = [self._pk_field.name]
490 else:
491 exclude = []

I have "organization_id" in the fk_attname e "address_ptr" in the self._pk_field.attname and so the primary_key wasn't insert in the exclude list.

Below a code portion to test the problem.

"""
from django.forms.models import inlineformset_factory
from my_apps.models import Organization, Address, OrganizationAddress

Organization(name='test').save()
org = Organization.objects.get(name='test')

inline_formset = inlineformset_factory(Organization, OrganizationAddress, can_delete=False, extra=2)

data = {

'addresses-TOTAL_FORMS': '2', # the number of forms rendered
'addresses-INITIAL_FORMS': '0', # the number of forms with initial data
'addresses-0-name': 'Test test',

}

formset = inline_formset(data, instance=org)

formset.is_valid()
formset.save()
"""

Sorry for my english.
Marco M.

Change History (0)

Note: See TracTickets for help on using tickets.
Back to Top