【发布时间】:2014-07-31 00:53:34
【问题描述】:
我想要一种 Pythonic 方式来完成以下任务。 在活动模型中调用一个方法,该方法返回一个带有活动 ID 和当前登录用户 ID 的 URL,即/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()
【问题讨论】:
-
set_current_user在做什么?如何从 Campaign 模型中引用用户?如果你有外键,你应该显示它。 -
请提供更多上下文。为什么要将用户 ID 放在 URL 中?
-
@Kos 更新了 OP 中的代码。当我在视图中加载活动时,我希望能够从使用当前登录用户构建的模型中获取自定义链接。用户没有链接到模型,我也不想访问模型中的请求范围。这是我目前能想到的最好方式。
-
但是您还没有解释为什么要这样做。您总是知道当前用户(在
request.user中),那么将 ID 放入 URL 有什么意义,尤其是当您说用户根本没有链接到广告系列时。为什么所有这些current_user的东西? -
@Daniel Roseman 好点。我在想我可以使用模型方法,然后让 URL 更复杂。所以它更多的是我需要的一个功能,那就是根据传递的值构建一个 URL。但也许你是对的,我想太多了。