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

Django models Django中另一个模型中对同一模型的多个引用,django-models,foreign-key-relationship,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.Text

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

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)
在这个场景中,有两个对用户模型的引用-一个通过User_id,另一个通过address.User,尽管它们应该引用同一个实例。重复引用是一种不好的做法吗


我想在地址中省略“user”foreignkey,但我认为没有用户地址就不可能存在。如何更好地对此进行建模?

正如您在问题中提到的,在 模特儿不是个好主意

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

这将生成两个表:学生、带字段的学校 用户,地址和用户,地址,联系人
分别。

Hi@crodjer,在一个完全不同的场景中,我想存储用户的费用并对其进行分类,我如何使用您所解释的相同概念?每个费用记录都将与一个用户关联。对于每项费用,用户必须关联他创建的一个类别。因此,我将有一些类似于
类别(用户、名称)
费用(用户、金额、类别)
。但是这里的用户引用是重复的。由于没有共享,我想我不能使用抽象类。既然学校地址和学生地址是相似的信息,它们不应该存储在一个表中,而不是像上面的抽象类示例那样存储在两个表中吗?
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)