Django3.0.1: после использования ForeignKey покажите эту проблему - Это поле не может быть пустым.
Я использую Django 3.0.1 и MySQL database.
I Прикрепил код ниже - в models.py, views.py, forms.py
models.py:
from django.conf import settings
from django.db import models
# Create your models here.
User = settings.AUTH_USER_MODEL
class BlogPost(models.Model):
user = models.ForeignKey(User, default=1, blank=True, null=True, on_delete=models.SET_NULL)
title = models.CharField(max_length=120)
slug = models.SlugField(unique=True)
content = models.TextField(null=True, blank=True)
views.py:
from django.contrib.auth.decorators import login_required
from django.contrib.admin.views.decorators import staff_member_required
from django.http import Http404
from django.shortcuts import render, get_object_or_404
from .models import BlogPost
from .forms import BlogPostForm, BlogPostModelForm
# Create your views here.
# @login_required
@staff_member_required
def blog_post_create_view(request):
# create objects - but how
# ? use a form
form = BlogPostModelForm(request.POST or None)
if form.is_valid():
post = form.save(commit=False)
post.user = request.user
post.save()
form = BlogPostModelForm()
template_name = 'blog/create.html'
context = {
'form': form,
}
return render(request, template_name, context)
forms.py:
from django import forms
from .models import BlogPost
class BlogPostForm(forms.Form):
title = forms.CharField(max_length=120)
slug = forms.SlugField()
content = forms.CharField(widget=forms.Textarea)
class BlogPostModelForm(forms.ModelForm):
class Meta:
model = BlogPost
fields = ['title', 'slug', 'content']
def clean_title(self, *args, **kwargs):
title = self.cleaned_data.get('title')
post_title = BlogPost.objects.filter(title=title)
if post_title.exists():
raise forms.ValidationError("This title has already been used. Please try again.")
return
(терминальные) миграции уже выполнены:
(venv)
fahim@Lenovo-IP320 MINGW64 /d/(G)/Python/try_django3.0
$ py manage.py makemigrations
No changes detected
(venv)
fahim@Lenovo-IP320 MINGW64 /d/(G)/Python/try_django3.0
$ py manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, blog, contenttypes, sessions
Running migrations:
No migrations to apply.
(venv)
fahim@Lenovo-IP320 MINGW64 /d/(G)/Python/try_django3.0
$
создать. html:
{% extends 'index.html' %}
{% block title %}
Create New Post
{% endblock %}
{% block content %}
{% if title %}
<h1>{{ title }}</h1>
{% endif %}
<form action="." method="post" enctype="multipart/form-data"> {% csrf_token %}
{{ form.as_p }}
<button class="btn btn-success" type="submit">Send</button>
</form>
{% endblock %}
проблема: Это поле не может быть пустым.