Skip to content

Instantly share code, notes, and snippets.

@suspiciousRaccoon
Created February 15, 2024 00:18
Show Gist options
  • Save suspiciousRaccoon/bd8dd11e0fed034a4a9705d87226bedd to your computer and use it in GitHub Desktop.
Save suspiciousRaccoon/bd8dd11e0fed034a4a9705d87226bedd to your computer and use it in GitHub Desktop.
Django - Automatically add the request user to a form field in CBV via mixin
from django.contrib.auth.mixins import LoginRequiredMixin
class SetUserMixin(LoginRequiredMixin):
"""
Automatically add `self.request.user` to a specified `user_field`. `use_field` defaults to "user"
"""
user_field = "user"
def form_valid(self, form):
setattr(form.instance, self.user_field, self.request.user)
return super().form_valid(form)
from django.db import models
from django.conf import settings
class MyModel(models.Model):
my_user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
name = models.CharField(max_length=255)
from django.views.generic.edit import CreateView
from .models import MyModel
from .mixins import SetUserMixin
class MyModelCreateView(SetUserMixin, CreateView):
model = MyModel
template_name = "my_app/template.html"
fields = ("name",)
success_url = reverse_lazy("my-app-view")
user_field = "my_user"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment