Es gibt Spiele-Entity, jeder von ihnen könnte 1 oder mehr Plattformen haben. Außerdem könnte jedes Spiel 1 oder mehr Links zu verwandten Spielen (mit ihren eigenen Plattformen) haben. Hier sieht es aus wie in models.py:Anpassen verwandter Objekte für viele-zu-viele-Feld in Django
class Game(TimeStampedModel):
gid = models.CharField(max_length=38, blank=True, null=True)
name = models.CharField(max_length=512)
platforms = models.ManyToManyField(
Platform, blank=True, null=True)
...
#here is the self-referencing m2m field
related_games = models.ManyToManyField(
"self", related_name="related", blank=True)
Und dieses Modells sind mit diesem Code in admin.py serviert:
@admin.register(Game)
class GameAdmin(AdminImageMixin, reversion.VersionAdmin):
list_display = ("created", "name", "get_platforms"...)
list_filter = ("platforms", "year",)
#I'm interested in changing the field below
filter_horizontal = ("related_games",)
formfield_overrides = {
models.ManyToManyField: {"widget": CheckboxSelectMultiple},
}
def get_platforms(self, obj):
return ", ".join([p.name for p in obj.platforms.all()])
I filter_horizontal = ("related_games verlängern müssen ",) Teil von admin.py - um eine Plattforminformation zu jedem Spiel im Widget für verwandte Spiele hinzuzufügen. Es sollte aussehen (Spielname und Plattformliste): "Virtual Fighter (PS4, PSP, PS3)".
Die Anwendung verwendet Django 1.7 und Python 2.7
Vielen Dank für Ihre Aufmerksamkeit.
Und was ist, wenn diese Funktionalität nur in Admin-Teil benötigt und nur im Zusammenhang mit horizontalen Filter Widget? Ich bin neu in diesem Projekt und nehme an, dass das Ändern von __unicode__ Teil einige Sachen brechen könnte. –
Ich habe die Antwort bearbeitet, um eine Alternative anstelle von überschreiben "__unicode__", obwohl es definitiv nicht so prägnant ist – ProfSmiles
Erste Variante mit __unicode__ funktioniert gut. Außer Join-Methode brauchen Strings, mit Ausnahme von Objekten. Also habe ich es so gemacht: '.join ([unicode (p) für p in self.platforms.all()]) –