您好我的系统中有很多用户被归类为不同类型。我想存储所有这些用户的地址详细信息。例如,用户可以是学生,学校或特许经营者。这里的所有用户都可以拥有与之关联的地址信息。
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,尽管它们应该引用同一个实例。重复引用是不好的做法?
我想在地址中省略'用户'外键,但我认为没有用户就不能存在该地址。如何更好地模拟这个?
答案 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 分别