我的网站有两种类型的用户;客户和供应商。我最终得到了以下类结构:
class Customer(models.Model):
# stuff specific to customers
class Supplier(models.Model):
# stuff specific to suppliers
class Profile(models.Model): # returned by Django's User.get_profile()
user = models.ForeignKey(User, unique=True)
customer = models.OneToOneField(Customer, null=True, unique=True)
supplier = models.OneToOneField(Supplier, null=True, unique=True)
现在我需要为这些模型添加多个地址:
地址类似于:
class Address(models.Model):
street1 = models.CharField(max_length=100)
street2 = models.CharField(max_length=100)
zipcode = models.CharField(max_length=16)
city = models.CharField(max_length=100)
state = models.CharField(max_length=100)
country = models.CharField(max_length=100)
我可以看到两种直接的解决方案来重复使用地址信息:或者参考来自Profile& amp;的ForeignKey的地址。客户类,或继承Profile&来自地址的客户类。
我可以看到两种方法的优点:
ForeignKey的
继承
你会选择哪一个?为什么?您认为其中任何一种解决方案本质上都不好吗?你看到了更好的选择吗?
答案 0 :(得分:1)
我可能会采用外键方式 - 我认为它更清洁。
处理您列出的继承的“优点”:
my_customer.address.zipcode
不是很难,是吗?__unicode__()
上定义Address
方法,并且只需添加address
(如果这就是您所谓的ForeignKey属性),您可以随时在Django管理员的对象旁边显示地址{1}})您的管理员Customer
。