Search code examples
pythondjangodjango-modelsdjango-managers

Method to create a model instance based on a request object


I have a model like this:

class UserSubmission(models.Model):
    mantra = models.CharField(max_length=64)
    ip = models.CharField(max_length=15) # xxx.xxx.xxx.xxx

I want to create a function like so:

def create_submission(request, mantra):
    s = UserSubmission(mantra=mantra)
    ip_meta_entry = 'HTTP_X_REAL_IP' in request.META and 'HTTP_X_REAL_IP' or 'REMOTE_ADDR'
    s.ip = request.META[ip_meta_entry]
    s.save()
    return s

Note: The above is purely for demonstration purposes and not exactly what I'm doing but I digress...

Where would be the ideal place to put a function like so? Class method on the model? In the manager? What would be best practice.


Solution

  • I tend to put functions that use request in views.py. Aside from error checking, your code should work fine.

    def create_submission(request, mantra):
        ip_meta_entry = 'HTTP_X_REAL_IP' in request.META and 'HTTP_X_REAL_IP' or 'REMOTE_ADDR'
        s = UserSubmission(
            mantra=mantra,
            ip=request.META[ip_meta_entry])
        s.save()
        return s