Seite 1 von 1
Many2Many Field backward field
Verfasst: Donnerstag 28. Juni 2018, 19:54
von Septias
Ich habe diese zwei Models:
Code: Alles auswählen
class Team(models.Model):
name = models.CharField(max_length=20, blank=True)
def __str__(self):
return self.name
class Spiel(models.Model):
begin = models.DateTimeField()
end = models.DateTimeField()
name = models.CharField(max_length=30, default="Namenslos :O")
teams = models.ManyToManyField(Team, blank= True, default='Für dieses Spiel gibt es keine Mitspieler')
def __str__(self):
return self.name
class Meta:
ordering = ('begin',)
Jetzt möchte ich auf der Adminseite von den Teams die Spieler hinzufügen, oder löschen können. Bei den Spielen kann ich die Spiele einfach mit dem Feld 'teams' anzeigen und bearbeite.
Wie kann ich zumindest mal die Many2Many relation für die Spieler in 'Team-Adminview' darstellen ?
Re: Many2Many Field backward field
Verfasst: Donnerstag 28. Juni 2018, 20:06
von Bolitho
Ich kann das gerade nicht nachstellen, aber hier ist die Doku:
https://docs.djangoproject.com/en/2.0/r ... any-models
so müsste das passen, wie gesagt (ungetestet):
Code: Alles auswählen
#admin.py
...
class SpielInline(admin.TabularInline):
model = Spiel
extra = 1
class TeamAdmin(admin.ModelAdmin):
inlines = (SpielInline,)
admin.site.register(Team, TeamAdmin)
...
Re: Many2Many Field backward field
Verfasst: Donnerstag 28. Juni 2018, 22:03
von Septias
Wenn ich den von dir bereit gestellten Code direkt übernehme, bekomme ich:
Code: Alles auswählen
<class 'anmeldung.admin.SpielInline'>: (admin.E202) 'anmeldung.Spiel' has no ForeignKey to 'anmeldung.Team'.
Aber so wie ich das sehe würde ich dann eher so ein Interface wie in dem Django-Tutorial bekommen (
https://docs.djangoproject.com/en/2.0/intro/tutorial07/)
Und eigentlich will ich schon vorher angemeldete Personen dem Team zuordnen, und nicht neue erstellen, die dann auch noch fest an das Team gebunden sind. So wie wenn ich bei den Spielen durch ein mulitple-choice-widget die Teams auswählen kann, die teilnehmen sollen. Aber anscheinend gibt es ja kein Feld, was ich einfach dem AdminModel übergenen kann, wodurch es angezeigt wird.
Muss ich wohl nach einem anderen Weg suchen... trotzdem danke ^^
Re: Many2Many Field backward field
Verfasst: Freitag 29. Juni 2018, 07:02
von Bolitho
gestern Abend war zu spät für mich und man sollte nicht helfen wollen, ohne selbst absolut sicher zu sein
So sollte es sein, oder?
Code: Alles auswählen
#admin.py
from django.contrib import admin
from .models import Spiel, Team
class SpielInline(admin.TabularInline):
model = Spiel.teams.through
class TeamAdmin(admin.ModelAdmin):
inlines = (SpielInline,)
admin.site.register(Team, TeamAdmin)
admin.site.register(Spiel)
Re: Many2Many Field backward field
Verfasst: Freitag 29. Juni 2018, 14:28
von Septias
Ja, das ist es. Vielen Dank

Schon komisch, wie oft ich das mit dem through field schon gelesen habe, aber nicht sehen konnte, dass ich genau danach gesucht habe ._. xD
Re: Many2Many Field backward field
Verfasst: Donnerstag 2. August 2018, 13:03
von Septias
Wie kann ich das Ganze für eine ForeignKey machen ?
Das selbe Szenario, ich habe ein Spieler mit einem ForeignKey zu einem Team. Nun will ich in der Team-Adminview Spieler dem Team zuweisen, aber keine neuen erstellen.
Ich dachte eigentlich, dass man das auch mit dem through-Attribut (Spieler.team.through) machen könnte, aber das gibt es bei ForeignKeys nicht.
Lg Septias