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. |