在Django中对另一个模型中的同一模型的多个引用

时间:2011-06-21 07:47:18

标签: django-models foreign-key-relationship

您好我的系统中有很多用户被归类为不同类型。我想存储所有这些用户的地址详细信息。例如,用户可以是学生,学校或特许经营者。这里的所有用户都可以拥有与之关联的地址信息。

from django.db import models
from django.contrib.auth.Models import User

class Address(models.Model):
    user = models.OneToOneField(User)
    address = models.TextField()

class Student(models.Model):
    user_id = models.ForeignKey(User)
    address = models.ForeignKey(Address)

class School(models.Model):
    user_id = models.ForeignKey(User)
    address = models.ForeignKey(Address)
    contact_person_name = models.CharField(max_length=50)

在这种情况下,有2个对User模型的引用 - 一个通过user_id,另一个通过address.user,尽管它们应该引用同一个实例。重复引用是不好的做法?

我想在地址中省略'用户'外键,但我认为没有用户就不能存在该地址。如何更好地模拟这个?

1 个答案:

答案 0 :(得分:1)

正如您已经提到过的相同字段的重复 一个模型不是一个好主意。

如果这些是您的实际型号,我建议您使用abstract models

from django.db import models
from django.contrib.auth.Models import User

class Profile(models.Model):
    user = models.OneToOneField(User, related_name="%(app_label)s_%(class)s_related")
    address = models.TextField()

    class Meta:
        abstract = True

class Student(Profile):
    pass

class School(Profile):
    contact_person_name = models.CharField(max_length=50)

这将生成两个表:学生,带有字段的学校 用户,地址和用户,地址,contact_person_name 分别