"整数字段"对象没有属性"value_from_datadict"错误



我在Django表单中有一个问题:获取错误:IntegerField' object没有属性'value_from_datadict'

这是我的form .py:

from django import forms
from .models import Post
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ('task_title','task_discription','task_category','recommended_tools','budget')
widgets = {
'task_title': forms.TextInput(attrs={'class':'form-control'}),
'task_discription': forms.Textarea(attrs={'class':'form-control'}),
'task_category': forms.Select(attrs={'class':'form-control'}),
'recommended_tools': forms.TextInput(attrs={'class':'form-control'}),
'budget': forms.IntegerField(min_value=10, max_value=10000000),
}

Views.py:

from django.shortcuts import render,get_object_or_404
from django.http import HttpResponse
from django.views.generic import ListView,DetailView, CreateView
from .models import Post, TaskCategory
from .forms import PostForm

class AddPost(CreateView):
model = Post
form_class = PostForm
template_name = 'add_post.html'

urls . py:

from django.urls import path
from .views import AddPost
urlpatterns = [
path('AddPost/', AddPost.as_view(), name = 'add_post')
]

models.py文件:我试图插入到数据库,使用django表单,但我总是得到错误从老虎,当我点击提交,注意正在发生,总是得到相同的错误

from django.contrib.auth.models import User
from django.db import models
from django.urls import reverse
class TaskCategory(models.Model):
category_title = models.CharField(max_length=50)
def __str__(self):
return self.category_title
class Post(models.Model):
task_title = models.CharField(max_length=250)
task_discription = models.CharField(max_length=250)
task_category = models.ForeignKey(TaskCategory, on_delete=models.CASCADE)
recommended_tools = models.CharField(max_length=250)
budget = models.IntegerField(default=0)
def __str__(self):
return self.task_title + ' | ' + self.task_discription + ' | ' + 
str(self.task_category) + ' | ' + self.recommended_tools + ' | ' + 
str(self.budget)
def get_absolute_url(self)       
return reverse('post_detail', args=[str(self.id)])
from django import forms
from .models import Post
class PostForm(forms.ModelForm):
task_category = forms.ChoiceField(choices=[(doc.uid, doc.name) for doc in Document.objects.all()])   #your choices data...
class Meta:
model = Post
fields = ('task_title','task_discription','task_category','recommended_tools','budget')
widgets = {
'task_title': forms.TextInput(attrs={'class':'form-control'}),
'task_discription': forms.Textarea(attrs={'class':'form-control'}),
'task_category': forms.Select(attrs={'class':'form-control'}),
'recommended_tools': forms.TextInput(attrs={'class':'form-control'}),
'budget': forms.NumberInput(attrs={'min': '0', 'class': 'yourClass', 'id': 'blah'}),
}

您使用表单字段forms.IntegerField()"widgets">这是错误的:

widgets = {         
# ...           # Wrong
'budget': forms.IntegerField(min_value=10, max_value=10000000),
}
因此,您需要使用小部件forms。numberinput ()"widgets">
widgets = {
# ...           # Correct
'budget': forms.NumberInput(attrs={'min': '10', 'max': '10000000'}),
}

您应该在IntegerField中设置属性,就像其他字段一样

像这样:

class TimerForm(forms.ModelForm):
class Meta:
model = Timer
fields=['hours']
widgets = {
'hours': forms.NumberInput(attrs={'min': '0', 'class': 'yourClass', 'id': 'blah'}),
}

最新更新