jpwatts / django-positions

A Django field for custom model ordering.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Multi-table model inheritance using parent_link not working

jackappleby opened this issue · comments

I have a few models that inherit from a parent one, for example:

class ContentItem(models.Model):

    class Meta:
        ordering = ['position']

    content_group = models.ForeignKey(ContentGroup)
    position      = PositionField(collection='content_group', parent_link='contentitem_ptr')


class Text(ContentItem):

    title = models.CharField(max_length=500, unique=False, null=True, blank=True)

I understand I need to use the parent_link argument. But I get this error when I use it:

websites.Text: (models.E015) 'ordering' refers to the non-existent field 'position'.

I've tried various field names such as websitecontentitem_ptr, websitecontentitem_ptr_id etc but no luck. What am I doing wrong?

I should say up front that I'm not actively using this project anymore, so I'm probably not going to be able to help all that much. I also haven't been involved in any recent maintenance, so I can't speak for how well the project has tracked changes to Django, etc. It's entirely possible that things have changed enough that using this code is now more trouble than it's worth.

That said, I was able to reproduce your issue when running makemigrations. I found two ways to get past the error:

  1. Add abstract = True to ContentItem.Meta
  2. Remove ordering = ['position'] from ContentItem.Meta and plan to rely on Text.objects.order_by('position')

If an abstract base model is appropriate for your use case, that's probably the option I would choose.

Good luck with your project. I wish I could be more helpful, but I can't afford the time away from other priorities.