0

I'm new to Django. How to add foreign key in same Model of different class?

from django.db import models

class Student(models.Model):
    name = models.CharField(max_length=20)
    address = models.CharField(max_length=200)

class Player(models.Model):
    student = models.ForeignKey(
        self.Student, #?
        on_delete = models.CASCADE,
    )
    sports_name = models.CharField(max_length=20)
waghso
  • 623
  • 7
  • 23

2 Answers2

2

You don't need use self, just leave only class name Student:

class Player(models.Model):
    student = models.ForeignKey(
        Student,
        on_delete = models.CASCADE,
    )
    sports_name = models.CharField(max_length=20)

Use self in case you need to get attribute of current instance: self.some_attribute, check this question for more details.

Also you can pass model name as the string:

class Player(models.Model):
    student = models.ForeignKey(
        'Student',
        on_delete = models.CASCADE,
    )
    sports_name = models.CharField(max_length=20)

It's called lazy relationship and usefull when related model is not defined yet.

neverwalkaloner
  • 46,181
  • 7
  • 92
  • 100
0

You don't actually need to use self.Student.Use this

class Student(models.Model):
    name = models.CharField(max_length=20)
    address = models.CharField(max_length=200)

class Player(models.Model):
    student = models.ForeignKey(self.Student, on_delete=models.CASCADE, null=True, blank=True)
    sports_name = models.CharField(max_length=20)

Don't forget to use

python manage.py makemigrations and python manage.py migrate

after you had done changes in model.

In some point -in-time you might want to use same model to have ForeignKey field. For that you may use self or the current model you want to make it as a Foreign Key('self' or 'Player') as string

class Student(models.Model):
    name = models.ForeignKey(models.CharField(max_length=20))
    address = models.CharField(max_length=20)
    related_student = models.ForeignKey(Student, on_delete = models.CASCADE, null=True, blank=True)

For this Example you may refer. Can I Make a foreignKey to same model in django?

Krish V
  • 486
  • 1
  • 5
  • 19