Opened 17 years ago
Last modified 17 years ago
#10075 closed
model inheritance with foreign key problem — at Version 1
| Reported by: | 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 (last modified by )
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.
(edited description, please please use the 'Preview' button when submitting a ticket)