Когда я пытаюсь создать новый пост с http: // localhost: 8000 / create /, я получаю эту ошибку. Я не мог найти решение, хотя они кажутся похожими. Я следую некоторому учебнику блога

Я не могу вставить settings.py здесь, потому что там много кода в посте, но я думаю, что settings.py хорошо между прочим

My models.py (* я удалил некоторый код, возможно, не связанный)

User = get_user_model()

class Author(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    profile_picture = models.ImageField()

    def __str__(self):
        return  self.user.username

class Post(models.Model):
    title = models.CharField(max_length=100)
    overview = models.TextField()
    detail = models.TextField()
    timestamp = models.DateTimeField(auto_now_add=True)
    content = RichTextUploadingField(config_name='post_ckeditor')
    comment_count = models.IntegerField(default=0)
    view_count = models.IntegerField(default=0)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    thumbnail = models.ImageField()
    categories = models.ManyToManyField(Category)
    featured = models.BooleanField()
    previous_post = models.ForeignKey('self', related_name='previous', on_delete=models.SET_NULL, blank = True, null = True)
    next_post = models.ForeignKey('self', related_name='next', on_delete=models.SET_NULL, blank = True, null = True)

My views.py

def get_author(user):
    qs = Author.objects.filter(user=user)
    if qs.exists():
        return qs[0]
    return None
    pass

def post_create(request):
    form = PostForm(request.POST or None, request.FILES or None)
    author= get_author(request.user)
    if request.method == 'POST':
        if form.is_valid():
            form.instance.author = author
            form.save()
            return redirect(reverse('post-detail', kwargs={
                'id': form.instance.id
                }))
    context = {
        'form': form
    }
    return render(request, 'post_create.html', context)
    pass

My forms.py

from django import forms
from .models import Post, Comment


class PostForm(forms.ModelForm):
    content = forms.CharField
    class Meta:
        model = Post
        fields = ('title', 'overview', 'content', 'thumbnail', 'categories', 'featured', 'previous_post', 'next_post')

class CommentForm(forms.ModelForm):
    content = forms.CharField(widget=forms.Textarea(attrs={
        'class':'form-control',
        'placeholder':'Type your comment',
        'id':'usercomment',
        'rows':4
    }))
    class Meta:
        model = Comment
        fields = ('content', )

Пожалуйста помоги !

0
johnho.91 20 Июл 2020 в 19:55

2 ответа

Лучший ответ

Если вы пытаетесь сохранить request.user в поле автора, вам не нужно писать дополнительные методы просто так.

if request.method == 'POST':
    if form.is_valid():
       post =form.save(commit=False)
       post.author = request.user
       post.save()
       return redirect(reverse('post-detail', kwargs={'id': post.id }))
0
arjun 20 Июл 2020 в 17:24

При каждом изменении полей модели или добавлении или удалении новой модели вы должны выполнить миграцию. И передать объект по умолчанию во внешний ключ, если не ноль.

0
Siva Sankar 20 Июл 2020 в 17:10