从视图调用模型方法

2024-04-25 09:15:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从视图中调用my models.py中定义的方法,但收到以下消息:

unbound method add_question_history() must be called with QuestionHistory instance as first argument (got User instance instead)

这是我的模型:

class QuestionHistory(models.Model):
    question = models.ForeignKey(Question, blank=True, null=True)
    user = models.OneToOneField('auth.User')
    created_at = models.DateTimeField(auto_now=True, auto_now_add=False)

def __unicode__(self):
    return unicode(self.question)

def add_question_history(user, question):
    qs = self.create(
        question = question,
        user = user
    )
    self.save()

这就是我在视图中调用此方法的方式:

QuestionHistory.add_question_history(request.user, question_ID)

Tags: 方法instanceselfadd视图trueautomodels
1条回答
网友
1楼 · 发布于 2024-04-25 09:15:34

您试图做的是在没有实例的情况下调用实例方法

似乎您想要的是一个类方法

因此,要使代码正常工作,您必须首先创建一个实例,或者将add_question_history创建为类方法

举个例子:

class QuestionHistory(models.Model):
    question = models.ForeignKey(Question, blank=True, null=True)
    user = models.OneToOneField('auth.User')
    created_at = models.DateTimeField(auto_now=True, auto_now_add=False)

    def __unicode__(self):
        return unicode(self.question)

   def add_question_history(self, user, question):
       qs = self.objects.create(
               question = question,
               user = user
       )
      qs.save()
      #more stuff

 QuestionHistory().add_question_history(request.user, questionID)

制作类方法:

class QuestionHistory(models.Model):
        question = models.ForeignKey(Question, blank=True, null=True)
        user = models.OneToOneField('auth.User')
        created_at = models.DateTimeField(auto_now=True, auto_now_add=False)

        def __unicode__(self):
            return unicode(self.question)

       @classmethod
       def add_question_history(cls, user, question):
           qs = cls.objects.create(
                   question = question,
                   user = user
           )
        qs.save()
        #stuff

 QuestionHistory.add_question_history(user,question)

为了更好地理解,请阅读this

相关问题 更多 >

    热门问题