/ / su più relazioni in django.models? noob qui - django, django-models

su più relazioni in django.models? noob qui - django, django-models

questo è il mio models.py

from django.db import models

# Create your models here.

class Leagues(models.Model):
LeagueName = models.CharField(max_length=200)

class Team(models.Model):
TeamName = models.CharField(max_length=200)

class LeagueTable(models.Model):
league = models.ForeignKey(Leagues)
team = models.CharField(max_length=200)
matches_played = models.IntegerField()
matches_won = models.IntegerField()
matches_drawn = models.IntegerField()
matches_lost = models.IntegerField()
points = models.IntegerField()

class FixtureTable(models.Model):
league = models.ForeignKey(Leagues)
fixture_date = models.DateField("Fixture Date")
team_one = models.CharField(max_length=200)
team_one_score = models.IntegerField()
team_two = models.CharField(max_length=200)
team_two_score = models.IntegerField()

nella "classe FixtureTable", voglio team_one e team_two essere collegati a due team diversi nei modelli di "classe Team". come creare più relazioni, o è possibile.

PS: questo è puramente un noob, con una piccola esperienza in programmazione, ma nessuna esperienza con python o database.

grazie.

risposte:

1 per risposta № 1

Puoi creare tutte le ForeignKeys che desideri sullo stesso modello. Sospetto che quello che ti sta facendo saltare in piedi sia Django che ti dà un errore dicendo che devi specificare un nome correlato.

Per impostazione predefinita, Django crea un attributo sul modello opposto del modulo <model>_set. Quindi nel seguente scenario:

class FixtureTable(models.Model):
team_one = models.ForeignKey(Team)

Django aggiungerebbe un manager correlato a Team come fixturetable_set. Se hai fatto allora:

class FixtureTable(models.Model):
team_one = models.ForeignKey(Team)
team_two = models.ForeignKey(Team)

Django tenterebbe di aggiungere lo stesso attributo due volte e ovviamente fallire. La correzione è specificare a related_name, quindi ognuno può avere un unico manager correlato:

class FixtureTable(models.Model):
team_one = models.ForeignKey(Team, related_name="team_one_fixturetables")
team_two = models.ForeignKey(Team, related_name="team_two_fixturetables")

Quindi, tutto funzionerà bene. Puoi specificare quello che ti piace related_name finché è unico per il modello.