【问题标题】:Django Model - Inherited Fields (Sorta ?)Django 模型 - 继承字段(排序?)
【发布时间】:2011-09-08 05:18:10
【问题描述】:

如何构造 RegisteredSubscriber 模型以实现下面伪代码中描述的功能?

我想我可以为每个字段实现一个函数,但这似乎不正确并且有点费力。想法?

 61 class RegisteredSubscriber(Subscriber):
 62     user = models.ForeignKey(User)
 63     first_name = self.user.first_name
 64     last_name = self.user.last_name
 65     email = self.user.email
 66
 67 class AnonymousSubscriber(Subscriber):
 68     first_name = models.CharField(max_length = 100)
 69     last_name = models.CharField(max_length = 100, blank = True)
 70     email = models.EmailField(unique = True)

好的,这实现了我想要的功能,但我确定它不合适。想法?正式的方法是什么,我犯了设计错误吗?

 59 class RegisteredSubscriber(Subscriber):
 60     user = models.ForeignKey(User, unique = True)
 61     first_name = 'candy'
 62     last_name = 'candy'
 63     email = 'candy'
 64
 65     def __init__(self, *args, **kwargs):
 66         super(RegisteredSubscriber, self).__init__(*args, **kwargs)
 67         
 68         if self.id:
 69             self.first_name = self.user.first_name
 70             self.last_name = self.user.last_name
 71             self.email = self.user.email
 72
 73     def __unicode__(self):
 74         return u'%s %s' % (self.first_name, self.last_name)

【问题讨论】:

  • 但是为什么不从 RegisteredSubscriber 中已有的 user 字段中获取 first_name、last_name...?

标签: django model


【解决方案1】:

由于您已经与User 建立了ForeignKey 关系,我不明白RegisteredSubscriber 模型中需要first_name, last_name, email 字段,除非我遗漏了什么。如果您想使用RegisteredSubscriber 实例访问first_name 等字段,ForeignKey 关系允许您使用__。 例如:user__first_name

【讨论】:

  • 原因是因为,假设我有一个订阅者对象 sub。我想在这两种情况下都使用 sub.first_name 访问 first_name,而不是 sub.user__firstname 或 sub.user.first_name 如果 sub 是 RegisteredSubscriber。
  • 您想在RegisteredSubscriber 表中存储用户first_name 等的副本还是像sub.first_name 一样访问它?
猜你喜欢
  • 2015-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多