| 1 | Yeah, but it's not about the **_state.db**.Basically, if we have these two models: |
| 2 | {{{ |
| 3 | class Parent(models.Model): |
| 4 | pass |
| 5 | class ChildA(Parent): |
| 6 | pass |
| 7 | class ChildB(Parent): |
| 8 | pass |
| 9 | |
| 10 | }}} |
| 11 | and we create "ChildA" object with **obj = ChildA.objects.create()**, we'll have 2 new instances - ***(ChildA) obj*** and ***(Parent) obj.parent_ptr)***. Now, if you try to create "ChildB" instance as follows: |
| 12 | {{{ |
| 13 | parent = obj.parent_ptr # parent._state.adding == True |
| 14 | child_b = ChildB(parent_ptr=obj.parent_ptr) |
| 15 | child_b.__dict__.update(parent) # to set all required attributes (if any) |
| 16 | child_b.full_clean() # this will throw an error for all of the unique fields of the parent instance ("id"for example) |
| 17 | child_b.save() |
| 18 | }}} |
| 19 | So, if you set {{{ obj.parent_ptr._state.adding = False }}} as soon as obj is created, the code above is working without errors. |
| 20 | Basically, the problem is that if we don't modify the _state's adding, it's no possible to create a new instance with the same parent_ptr. |