Opened 5 years ago
Closed 5 years ago
#30531 closed Bug (invalid)
Exception when creating an inherited model object with existing base
Reported by: | Victor Porton | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 2.2 |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
The following intuitively right causes an exception:
class Base(models.Model): v = models.IntegerField() class Derived(Base): base = models.OneToOneField(Base, on_delete=models.CASCADE, primary_key=True) class BugTestCase(TestCase): def setUp(self): self.base = Base.objects.create(v=0) def test_bug(self): Derived.objects.create(base=self.base)
Here it is:
django.db.utils.IntegrityError: NOT NULL constraint failed: mytest_base.v
It should work in the expected way not to raise an exception.
In the project I am developing now, I am going to write a workaround with a raw SQL query :-(
I will attach full test source.
Attachments (1)
Change History (2)
by , 5 years ago
Attachment: | django-create-inherited-bug.tar.gz added |
---|
comment:1 by , 5 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
If you want to use Derived.base
as your inheritance parent link you have to mark it accordingly.
Right now your table Derived
model has two o2o fields pointing at Base
; the explicit one you defined and the implicit parent link base_ptr
. When you try to create your Derived
object in test_bug
it's the base_ptr.v
field value that is missing.
Adding parent_link=True
to your Derived.base
field should address your issue.
Closing per TicketClosingReasons/UseSupportChannels.
Source which causes the bug