0

我有以下型号:

class Member(models.Model):
    name = models.CharField(max_length=255)


class Location(models.Model):
    name = models.CharField(max_length=255)
    member = models.ForeignKey(Member)


class Department(models.Model):

    name = models.CharField(max_length=255)
    member = models.ForeignKey(Member)



class LocationInvite(models.Model):
    sent = models.BooleanField(default=False)
    location = models.ForeignKey(Location)

    def send(self):
        location = self.location.member
        email = self.location.member.email
        send_populated_email(location, email)
        self.sent = True

我需要让部门也有邀请。

我正在考虑将 LocationInvite 更改为 Invite 并使其成为抽象基类。然后我将创建 2 个具体的实现 LocationInvite 和 DepartmentInvite。我将位置外键移动到 LocationInvite 类。

那么我将如何重构邀请的发送方法以适应提取位置或部门的电子邮件地址,具体取决于具体实现?

我的问题是,使用抽象基类是一个很好的架构举措吗?考虑到 send 方法的约束,我将如何实现它?

这些记录将达到数百万,这就是我没有提到使用通用外键的原因。除非这不是问题?

4

2 回答 2

0

将属性访问重构为单独的属性,并在每个模型中覆盖。

class Invite(...):
  def send(...):
    self._group....
     ...
   ...

class LocationInvite(Invite):
   ...
  @property _group(self):
    return self.location

class DepartmentInvite(Invite):
   ...
  @property _group(self):
    return self.department
于 2013-10-14T15:10:30.450 回答
0

我创建了一个抽象基类,并让两个邀请类型都从它扩展。

于 2013-10-16T21:05:31.843 回答