I have a "training" model containing a ManyToManyField to a "trainer" model.
Let's take the exemple "training 1" has 3 trainers "A" "B" and "C". And "training 2" only has one trainer "A".
In my admin panel when I want to see all the trainings, it shows me something like:
"training 1" : "A"
"training 1" : "B"
"training 1" : "C"
"training 2" : "A"
Because I already did an inline in order to get all the trainers from one entity, I would like it to only show one of each training, so something like:
"training 1" : "A"
"training 2" : "A"
My models look like this :
class Training(models.Model):
name = models.CharField(
max_length=60
)
trainer = models.ManyToManyField(
Trainer,
through='Training_trainer'
)
class Trainer(models.Model):
first_name = models.CharField(
max_length=60
)
last_name = models.CharField(
max_length=60
)
And my admin.py look like this :
class Training_trainerInline(admin.TabularInline):
model = Training.trainer.through
extra = 3
class TrainingAdmin(admin.ModelAdmin):
list_display = ('name', 'get_trainer')
list_filter = ('trainer',)
fieldsets = (
(None, {'fields': ('name',)}),
)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('name', 'trainer')}
),
)
search_fields = ('name', 'trainer',)
ordering = ('name', 'trainer',)
inlines = [Training_trainerInline, ]
def get_trainer(self, obj):
return "\n".join([str(p.trainer) for p in Training_trainer.objects.filter(training=obj)[:1]])
get_trainer.short_description = 'Trainer'
Testing by trial and error, I finally found out what was causing the problem:
In admin.py, this line was the problem
ordering = ('name', 'trainer',)
By removing the ordering by 'trainer', Django show each training only once.
ordering = ('name',)