Ger*_*dJP 1 django django-models
我需要向用户显示他拥有的对象.由于我需要在超过80%的观看次数上执行此操作,因此硬编码会导致DRY死亡.更重要的是,用户永远不会看到其他人拥有的记录.手工完成(在所有视图中)似乎也容易出错.
我一直在寻找装饰器(如login_required),但这似乎在请求处理过程的早期.是否可以将request.user值获取到自定义编写的管理器中并执行以下操作:
class CustomerManager(models.Manager):
def get_query_set(self):
return super(CustomerManager, self).get_query_set().filter(created_by=request.user)
Run Code Online (Sandbox Code Playgroud)
或者经理对象就像'不去!' 就请求信息而言,作为模型定义?
非常感谢.
这是保存对象的一部分,但纯粹在这里作为详细说明,而不是必要的阅读.
保存部分相对安全.我更改了模型上的object.save()函数,因此它将userid作为parm.
def save(self, userid):
self.created_by = userid
super(Customer, self).save(userid)
Run Code Online (Sandbox Code Playgroud)
在视图中:
if form.is_valid():
customer = form.save(commit=False)
customer.save(request.user)
Run Code Online (Sandbox Code Playgroud)
这样我以前不需要在我的视图中使用下面的行 customer.save...
customer.created_by = request.user
Run Code Online (Sandbox Code Playgroud)
从而减少了错误.
为什么不定义在CustomerManager中为用户提取记录的方法:
class CustomerManager(models.Manager):
def get_user_records(self, user):
return self.filter(created_by=user)
Run Code Online (Sandbox Code Playgroud)
我会留下get_query_set未经重复的,因为我认为在你的情况下没有任何好处可以覆盖它.
| 归档时间: |
|
| 查看次数: |
869 次 |
| 最近记录: |