Django-mptt model does not order by (order_insertion_by) profile (ForeignKey), but it does after rebuild()
models.py
class Product(MPTTModel):
# fields
profile = models.ForeignKey(
Profile,
blank=True,
null=True,
on_delete=models.CASCADE,
)
# more fields
class MPTTMeta:
order_insertion_by = ['profile']
Profile is also an MPTT model connected to User by OneToOneField
models.py
class Profile(MPTTModel):
# fields
user = models.OneToOneField(User, on_delete=models.PROTECT)
# more fields
class Meta:
abstrat = False
ordering = ["user__last_name", "user__first_name", "user__username"]
class MPTTMeta:
parent_attr = "manager"
def get_name(self):
return f"{self.user.last_name}, {self.user.first_name}"
def __str__(self):
return self.get_name()
If I save some data, then order_insertion_by will order the data by id and not by last_name,first_name. But if I save and rebuild() the Product objects Product.objects.rebuild(), then it orders by last_name,first_name.
The structure is:
- Product (root)
- Product (child) (needs to be sorted by profile and is the only child which contains profile)
- Product (child of child)
- Product (child of child of child)
- Product (child of child)
- Product (child) (needs to be sorted by profile and is the only child which contains profile)
I want to understand why I need to use rebuild(), as rebuild() takes a lot of resources.