【问题标题】:Field 'id' expected a number but got 'r' - Django form字段 'id' 需要一个数字,但得到了 'r' - Django 表单
【发布时间】:2020-05-08 23:53:20
【问题描述】:

我有一个创建博客文章的 Django 表单,但是表单在提交时会抛出异常。奇怪的是,他们仍然创建这些帖子,我可以在其他页面上查看这些帖子。这是我的 models.py、views.py、form.py 代码和堆栈跟踪。

模型.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)

不想用大量的文字堵塞帖子,所以为了便于阅读,我使用了 Django 的堆栈跟踪共享功能:Stack trace

我不明白字符 'r' 的来源,因为它仍在更新数据库,有人能解释一下为什么会这样吗?另外,我还尝试了以下操作: ValueError: Field 'id' expected a number but got 'Processing'

【问题讨论】:

  • 所以它正在使用正确的 ID 填充作者?
  • @WombatPM 是的,ID 值都相应匹配。他们还将相关的用户名呈现给实际的模板。
  • 它是否可能来自以前的迁移?可能会删除除 init.py 之外的所有迁移并进行迁移和迁移。为我工作
  • 不,我已经删除了这些迁移,但它仍然不起作用

标签: python django python-3.x django-models django-forms


【解决方案1】:

问题已解决。

我正在使用 Materialize CSS 框架,它覆盖了默认复选框,并选择了 HTML 标签属性,因此您需要使用 Javascript 初始化这些属性。 Select - Materialize

所以,我试图将值插入到外键值中。

【讨论】:

    猜你喜欢
    • 2021-03-13
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 2021-06-03
    • 2021-01-22
    • 2021-07-30
    相关资源
    最近更新 更多