Yousuf Jawwad
Yousuf Jawwad

Reputation: 3097

about multiple relations in django.models? noob here

this is my 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()

in the "class FixtureTable", i want team_one and team_two to be linked to two differnt teams in "class Team" models. how to create multiple relations, or is it possible.

PS: this is purely a noob, with a little experience in programming, but no experience with either python or databases.

thankyou.

Upvotes: 0

Views: 49

Answers (1)

Chris Pratt
Chris Pratt

Reputation: 239240

You can create as many ForeignKeys as you like to the same model. I suspect what's tripping you up is Django giving you an error saying that you need to specify a related name.

By default, Django creates an attribute on the opposite model of the form <model>_set. So in the following scenario:

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

Django would add a related manager to Team as fixturetable_set. If you then did:

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

Django would attempt to add the same attribute twice and obviously fail. The fix is to specify a related_name, so each can have a unique related manager:

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

Then, everything will work fine. You can specify whatever you like for related_name as long as it's unique for the model.

Upvotes: 1

Related Questions