I get an error when downloading

I understand the model lacks the user id, but where it is missing, I can not understand. Django seems to be doing all the work for me))

IntegrityError at / upload / NOT NULL constraint failed: blog_post.author_id

Download handler (views.py)

def model_form_upload(request): if request.method == 'POST': form = PostForm(request.POST, request.FILES) if form.is_valid(): # file is saved form.save() return HttpResponseRedirect('/') else: form = PostForm() return render(request, 'upload.html', {'form': form}) 

Model (models.py)

 SCRIPT_TYPE = ( ('SINGLE', 'SINGLE'), ('MULTI', 'MULTI'), ) class Post(models.Model): author = models.ForeignKey('auth.User', null=False, verbose_name="Автор", ) title = models.CharField(max_length=200, null=False, verbose_name="Заголовок", ) type = models.CharField(max_length=10, choices=SCRIPT_TYPE, default='MULTI', null=False, verbose_name="Тип", ) text = models.TextField(null=True, verbose_name="Описание", ) published_date = models.DateTimeField(blank=True, null=True, verbose_name="Дата создания", ) script = models.FileField(null=False, blank=True, upload_to="scripts/", verbose_name="Скрипт", ) def publish(self): self.published_date = timezone.now() self.save() def __str__(self): return self.title 

Html file

 {% load staticfiles %} <html> <head> <title>Django blog</title> <link href="https://fonts.googleapis.com/css?family=Lobster&subset=latin,cyrillic" rel="stylesheet" type="text/css"> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"> <link rel="stylesheet" href="{% static 'css/main_window.css' %}"> </head> <body> <h1>New post</h1> <form method="post" class="post-form" enctype="multipart/form-data" action="/upload/"> {% csrf_token %} {{ form.as_p }} <button type="submit" class="save btn btn-default">Save</button> </form> </body> </html> 

    1 answer 1

    The error tells you that the save did not set the required field author model Post . Apparently, you want to keep in this field the user who clicked on the "Save" button in the form. You can do it like this:

     from django.contrib.auth.decorators import login_required @login_required def model_form_upload(request): ... post = form.save(commit=False) post.author = request.user post.save() ... 
    • Thank you very much)) - Arthur