0

I have a Django form that creates blog posts, however the form throws Exceptions when submitting. Strangely, however they still create these posts and I can view these on the other page. Here are my models.py, views.py, form.py code and the stack trace.

Models.py


from django.db import models
from django.utils import timezone
from django.contrib.auth import get_user_model

User = get_user_model()


class Author(models.Model):
    """ Inherits the auth user model """
    user = models.OneToOneField(User, on_delete=models.CASCADE)

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


class Category(models.Model):
    """ Generic entries so posts can be filtered """
    title = models.CharField(max_length=20)

    def __str__(self):
        return self.title


class News_Post(models.Model):
    """ Inherits Category & Author Models """
    title = models.CharField(max_length=100)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    date_modified = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    categories = models.ManyToManyField(Category)
    featured = models.BooleanField()
    post_img = models.ImageField(default='default.jpg')

    def __str__(self):
        return self.title

Forms.py:

from .models import News_Post
from django import forms


class News_Post_Form(forms.ModelForm):
    """ Form responsible for creating new posts. """
    id = None
    content = forms.CharField()
    categories = forms.CharField()
    featured = forms.BooleanField()
    post_img = forms.ImageField()

    class Meta:
        model = News_Post
        fields = [
            'title',
            'content',
            'categories',
            'featured',
            'post_img',
        ]

Views.py


from django.shortcuts import render, redirect
from .models import News_Post, Author
from .forms import News_Post_Form
from django.contrib.auth.decorators import login_required

from django.views.generic import CreateView


def get_author(user):
    """Gets the author"""
    ath= Author.objects.filter(user=user)
    if ath.exists():
        return ath[0]
    return None


class PostCreateView(CreateView):
    """Generic post view """
    model = News_Post
    template_name = 'create_post.html'
    form_class = News_Post_Form

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['title'] = 'Create'
        return context

    def form_valid(self, form):
        form.instance.author = get_author(self.request.user)
        form.save()


@login_required
def news_post_create(request):
    """ Creates new posts """
    title = 'Create a new post.'
    author = get_author(request.user)
    form = News_Post_Form(request.POST or None, request.FILES or None)

    if request.method == 'POST':
        if form.is_valid():
            form.instance.author = author
            form.clean()
            form.save()
            return redirect('blog/posts.html')
    context = {
        'title': title,
        'form': form,

    }
    return render(request, 'blog/create_post.html', context)


@login_required
def news_post(request):
    """ Renders the 'News_Post' model. """
    query = News_Post.objects.filter(featured=True)
    context = {
        'obj_list': query
    }
    return render(request, 'blog/posts.html', context)

Didn't want to clog up the post with a sea of text, so for readability purposes I used Djangos stack trace sharing feature: Stack trace

I don't understand where the character 'r' is coming from, because it still updates the database, could someone also provide an explanation as to why this is occuring? Also, I also tried following: ValueError: Field 'id' expected a number but got 'Processing'

M.McMoran
  • 31
  • 5

1 Answers1

1

Issue resolved.

I'm using the Materialize CSS framework, it overrides the default checkbox, and select HTML tags attributes so you need to initialize these with Javascript. Select - Materialize

So, I was force-ably trying to insert values into a Foreign Key value.

M.McMoran
  • 31
  • 5