django form set current login user

前端 未结 3 1782
猫巷女王i
猫巷女王i 2020-12-10 08:55
@login_required
def post_review(request):
    if request.method == \'POST\':
        formset = ReviewForm(request.POST)
        if formset.is_valid():
            fo         


        
3条回答
  •  情深已故
    2020-12-10 09:29

    As an alternative solution, in Django 2+ using a form view - such as a CreateView or FormView, I can simply pass the self.request.user to my pre-saved form model:

    class AppCreateView(CreateView):
        model = models.App
        fields = ['name']
        success_url = '/thanks/'
    
        def form_valid(self, form):
            app_model = form.save(commit=False)
            app_model.author = self.request.user
            # app_model.user = User.objects.get(user=self.request.user) # Or explicit model 
            app.save()
            return super().form_valid(form)
    

    I agree the class based view is not important here. The important line is app_model.author = self.request.user.

    The model is not special:

    from django.db import models
    from django.contrib.auth.models import User
    
    
    class App(models.Model):
        author = models.ForeignKey(User, on_delete=models.CASCADE)
        name = models.CharField(max_length=255, help_text="Arbitrary name")
        created = models.DateTimeField(auto_now_add=True, max_length=255)
    

提交回复
热议问题