How to add\get data in admin via reversed relation using GenericTabularInline?

25 views
Skip to first unread message

Anton Ponomarenko

unread,
Oct 13, 2016, 1:26:31 PM10/13/16
to Django users

Hi all.

I can add Criterias to a place. How can I add Places to a criteria?

Models:

class Criterias(models.Model):
    name = ...

class Places(models.Model):
    name = ...

class PlacesToCriterias(models.Model):
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey()

    criteria_group = models.ForeignKey(Criterias)

Admin - PLACES part:

class PlaceCriteriasInlineAdmin(GenericTabularInline):
    model = PlacesToCriterias

class PlacesAdmin(admin.ModelAdmin):
    inlines = [PlaceCriteriasInlineAdmin]

admin.site.register(Places, PlacesAdmin)

In this case, when I open Places admin change page, I can add Criterias items to my 'place'.

Admin - CRITERIAS part:

class CriteriaPlacesInlineAdmin(GenericTabularInline):
    model = PlacesToCriterias

class CriteriasAdmin(admin.ModelAdmin):
    inlines = [CriteriaPlacesInlineAdmin]

admin.site.register(Criterias, CriteriasAdmin)

In this case, when I open Criterias admin change page, I CAN NOT add Places item to my 'criteria', because instead of possible places I see criterias.

How to get Places items at Criterias admin page?
Thanks.


Anton Ponomarenko

unread,
Oct 13, 2016, 5:44:55 PM10/13/16
to Django users
It was quite easy. GenericTabularInline must be changed to admin.TabularInline


class CriteriaPlacesInlineAdmin(admin.TabularInline):

Anton Ponomarenko

unread,
Oct 14, 2016, 2:59:49 PM10/14/16
to Django users
If anyone needs to get dropdown list with selected object, instead of content_type and object_id fields, the solution is here.
Reply all
Reply to author
Forward
0 new messages