在我看来,我试图重写 get() 方法:
broadcast = Broadcast.objects.get(request, pk = broadcast_id)
在我的模型中,重写方法为:
class Broadcast(models.Model):
person = models.ForeignKey(User)
post = models.CharField(max_length=300 , verbose_name = 'Say it out loud !')
.
.
def get(self, *args, **kwargs):
if request.user == self.person :
super(Broadcast, self).get(*args, **kwargs)
else :
return none
两个问题->
我的重写哪里出了问题?
如何访问传递给 get 的“request”参数?
最佳答案
给出 Django 教程中的民意调查应用程序示例。您可以执行 get
操作来获取 poll
来自数据库的问题。
In : Question.objects.get(pk=1)
Out: <Question: Question object>
这篇博文展示了如何重写该方法。它不在模型本身上。 问题.对象
给你经理。
In : Question.objects
Out: <django.db.models.manager.Manager at 0x10d3b8860>
您可以在 models.py 中放入自定义管理器。
class QuestionManager(models.Manager):
pass
class Question(models.Model):
objects = QuestionManager()
这会导致...
In : Question.objects
Out: <app.models.QuestionManager at 0x107456e48>
但我们还没有完全做到这一点。 Question.objects.get 正在做一些委托(delegate)魔法,实际上 对 QuerySet 实例调用 get。我们可以替换
class QuestionQuerySet(models.query.QuerySet):
def get(self, **kwargs):
print('hello world')
return super().get(**kwargs)
class QuestionManager(models.Manager.from_queryset(QuestionQuerySet)):
pass
瞧!
In : Question.objects.get(pk=1)
hello world
Out: <Question: Question object>
引用文献:
关于django - 重写模型中的 get() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6520445/