Method to create a model instance based on a request object

139 views Asked by At

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.

1

There are 1 answers

0
Jeffrey Bauer On BEST ANSWER

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