Pythonic使用getter和setter的方式

时间:2014-06-10 09:53:33

标签: python django

我想要一种完成以下任务的Pythonic方法。 调用广告系列模型中的方法,该方法返回包含广告系列ID和当前登录用户ID的网址,即/campaign_id/user_id

要实现这一点,我需要request.user范围,但我不认为直接在我的模型中使用它是个好主意。我一直在阅读Python可以使用getter和setter,这会有用吗?所以我的想法就是拥有这样的东西......

campaign = Campaign.object.get(id=1)
campaign.set_current_user(request.user)

referral_url = campaign.get_referral_url()

which would give me /campaign_id/user_id/

这是一个好方法吗?

到目前为止

我的模型:

class Campaign(models.Model):
   name = models.CharField(max_length=120)

   @property
   def current_user(self):
       return self._current_user

   @current_user.setter
   def current_user(self, user_object):
      if user_object:
          return user_object.id
      else:
          return None


   def _build_referral_url(self):
        """
        Builds the full referral URL for the user.
        :return:
        """
        return self.name + "/" + self.current_user


    def get_referral_url(self):
        """
        :return: Campaign referral URL.
        """
        return self._build_referral_url()

1 个答案:

答案 0 :(得分:2)

而不是:

def get_referral_url(self):

简单定义:

def get_referral_url_for(self, user):

这看起来最简单,并且不会给出错误的印象,即user有问题会以某种方式与Campaign永久关联。