首页 > 解决方案 > 如何在 Django 模型中与父表共享子外部表

问题描述

我目前有这个设置:

class Address (models.Model):
    Member = models.ForeignKey(Member, blank=True, null=True, on_delete=models.CASCADE)
    Unit = models.ForeignKey(Unit, blank=True, null=True, on_delete=models.CASCADE)
    Address1 = models.TextField(max_length=512)
    Address2 = models.TextField(max_length=512, null=True, blank=True)
    City = models.TextField(max_length=100)
    State = models.TextField(max_length=100)
    Zip = models.TextField(max_length=25)
    Latitude = models.FloatField(null=True, blank=True)
    Longitude = models.FloatField(null=True, blank=True)
    Primary = models.BooleanField(default=False)


class Phone (models.Model):
    Member = models.ForeignKey(Member, blank=True, null=True, on_delete=models.CASCADE)
    Unit = models.ForeignKey(Unit, blank=True, null=True, on_delete=models.CASCADE)
    Phone = models.CharField(max_length=25)
    Type = models.CharField(max_length=25)
    Primary = models.BooleanField(default=False)


class Member (models.Model):
    FederationID = models.FloatField(unique=True)
    UserId = models.ForeignKey(User, on_delete=models.CASCADE)
    height = models.IntegerField(blank=True, null=True)
    eye = models.CharField(blank=True, null=True)
    hair = models.CharField(blank=True, null=True)
    bio = models.TextField()


class Unit (models.Model):
    Name = models.CharField(max_length=255)
    Hull = models.CharField(max_length=20)
    Type = models.CharField(max_length=20)

我正在尝试使用单个地址表来模拟成员和单位的地址。
我在问这是否是解决这个问题的正确方法?是否有更干燥的版本可以正确执行此操作。还要注意电话型号。同样的问题。谢谢。

标签: pythondjangodjango-models

解决方案


如果多个成员共享同一个地址怎么办?如果有新模型也需要地址怎么办?将 Address 字段放在 Member 和 Unit 模型中而不是反过来可能会更干净。

class Member(Model):
    Address = ForeignKey(...)

class Unit(Model):
    Address = ForeignKey(...)

并从地址中删除成员和单位字段。将具有地址而不是地址的成员视为具有成员更直观。


推荐阅读