使用getter和setter的python方法

使用getter和setter的python方法,python,django,Python,Django,我想用一种类似蟒蛇的方式来完成以下任务调用活动模型中的方法,该方法返回带有活动ID和当前登录用户ID的URL,即/Campaign\u ID/user\u ID 要实现这一点,我需要request.user范围,但我认为在我的模型中直接使用它不是一个好主意。我一直在读Python可以使用getter和setter,这有用吗?所以我的想法是有这样的东西 campaign = Campaign.object.get(id=1) campaign.set_current_user(request.us

我想用一种类似蟒蛇的方式来完成以下任务调用活动模型中的方法,该方法返回带有活动ID和当前登录用户ID的URL,即
/Campaign\u ID/user\u 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()
而不是:

def get_referral_url(self):
简单定义:

def get_referral_url_for(self, user):

这看起来最简单,不会给人一种错误的印象,即所讨论的
user
会以某种方式永久连接到
活动

什么是
set\u current\u user
呢?如何从活动模型中引用用户?如果你有外键,你应该显示它。请提供更多的上下文。为什么要将用户ID放在URL中?@Kos在OP中更新了代码。当我在视图中加载活动时,我希望能够从使用当前登录用户构建的模型中获取自定义链接。用户未链接到模型,我也不想访问模型中的请求范围。这是目前我能想到的最好的办法,但你还没有解释你为什么要这么做。你总是知道当前用户(它在
请求.user
中),所以把ID放在URL中有什么意义,特别是当你说用户根本没有链接到活动时。为什么所有这些
都是当前用户的东西?@Daniel Roseman说得很好。我在想,我可以使用一个模型方法,然后使URL更复杂。因此,它更像是我需要的一个函数,它根据传递的值构建URL。但也许你是对的,我想得太多了。好吧,有一个方法,即def get_campaign_url_for_user(self,user):