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/)Bild

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?
Bild

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