spi*_*idy 0 python django django-forms
当我尝试保存表单时,我得到空约束
我的模特
class Subject(models.Model):
name=models.CharField(max_length=128, blank=True)
created=models.DateTimeField('Created Date',blank=True)
def __str__(self):
return self.name
class Book(models.Model):
book_subject=models.ForeignKey(Subject,on_delete=models.CASCADE)
book_name=models.CharField(max_length=128)
url=models.URLField()
votes=models.IntegerField(default=0)
created_time=models.DateTimeField('Created Date',blank=True)
comments=models.CharField(max_length=400)
def __str__(self):
return self.book_name
Run Code Online (Sandbox Code Playgroud)
我的表格
class SubjectForm(forms.ModelForm):
class Meta:
model = Subject
fields=('name', )
class BookForm(forms.ModelForm):
class Meta:
model = Book
fields=('book_title',)
Run Code Online (Sandbox Code Playgroud)
视图.py
def add_subject(request):
if request.method == 'POST':
form = SubjectForm(request.POST)
if form.is_valid():
form.save(commit=True)
return index(request)
else:
print form.errors
else:
form = SubjectForm()
return render(request,'add_subj.html', {'form': form})
Run Code Online (Sandbox Code Playgroud)
保存表单时出现空约束错误。错误是在 form.save(commit=True)的views.py中引起的......一切都很简单......但是令人困惑......可能是什么问题......
当我打印表格时,我得到以下答案
<tr><th><label for="id_name">Name:</label></th><td><input id="id_name" maxlength="128" name="name" type="text" value="civil" /></td></tr>
Run Code Online (Sandbox Code Playgroud)
非常感谢任何帮助...提前致谢
看起来您实际上并没有设置“created”字段,并且虽然您设置了blank=True,但尚未设置null=True。blank只是意味着该字段不需要填写在表单中,而null实际上允许该字段存在于None数据库中。这就是为什么您的表单正在验证,但实际上并未保存。
因此,您可以添加null=True到您的created和created_time字段。但是,如果您的目的只是让它们存储创建日期,那么将字段设置为类似以下内容会更容易:
created = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
auto_now_add将在创建对象时自动为您设置该字段。这几乎应该可以满足您的需要。
| 归档时间: |
|
| 查看次数: |
1259 次 |
| 最近记录: |