[Answer]-Calling models method from views

1👍

What you are trying to do is to invoke an instance method without an instance.

It seems to be that what you want it’s a classmethod

So for your code to work you have either make an instance first or create add_question_history as a classmethod.

Making an instance:

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)

Making a classmethod:

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)

For better understanding read this

Leave a comment