【发布时间】:2017-12-20 12:48:48
【问题描述】:
我的模型中有这样的字段:
name = models.CharField(max_length=20, default='Anonymous')
但是当我在该字段中输入更多字符时,没有错误,我可以输入任意数量的字符。我可以在我看来,在 admin/ 中做,反正没有错误。 有人建议我在保存条目之前制作 .full_clean() ,但这并不影响,该字段仍然允许输入超过 20 个字符。与其他字段相同。
我非常非常非常抱歉我的英语不好。
更新: 我的models.py的完整代码:
from django.db import models
from django.core.files.storage import FileSystemStorage
import imgboard.const as c
fs = FileSystemStorage(location='/static/img')
class Board(models.Model):
addr = models.CharField(max_length=5, primary_key=True)
# Short description to be displayed on index page
description = models.CharField(max_length=20, verbose_name="Short description")
# Is namefags allowed in this thread
names_allowed = models.BooleanField(default=False, verbose_name="Custom names is allowed")
default_name = models.CharField(max_length=20, default='Anonymous')
# Description to be displayed in header of board page
verbose_description = models.CharField(max_length=400, default='')
# Allowed extensions of files that can be uploaded to this board
allowed_extensions = models.CharField(max_length=1024, default=c.ALLOWED_EXTENSIONS)
# Number of a thread, that will be pinned to top.
pinned_thread_id = models.IntegerField(default=-1)
# Is threads w/o pic allowed
file_required = models.BooleanField(default=False, verbose_name="File is required")
def __str__(self):
return '/'+self.addr+'/ - '+self.description
class Meta:
ordering = ['addr']
class Thread(models.Model):
board = models.ForeignKey(Board, db_column='addr', on_delete=models.CASCADE)
name = models.CharField(max_length=20, default='Anonymous')
last_msg_date = models.DateTimeField(verbose_name='Time of last message published in this thread',
auto_now_add=True)
pic = models.CharField(max_length=3000, default='')
pub_date = models.DateTimeField(auto_now_add=True)
text = models.CharField(max_length=5000)
sage_counter = models.IntegerField(default=0)
bumps = models.IntegerField(default=1)
def __str__(self):
return self.text
class Meta:
ordering = ['-last_msg_date']
class Message(models.Model):
thread = models.ForeignKey(Thread, on_delete=models.CASCADE)
name = models.CharField(max_length=20, default='Anonymous')
pic = models.CharField(max_length=3000, default='')
text = models.CharField(max_length=5000)
pub_date = models.DateTimeField(auto_now=True)
# OP-post mark displays, that this message was written by thread creator
op_post = models.BooleanField(default=False)
# Sage mark displays, that thread will not be bumped by this message
sage = models.BooleanField(default=False)
def __str__(self):
return self.text
class Meta:
ordering = ['-pub_date']
迁移运行了很多次,因为我很久以前写了“max_length”,但现在才注意到这个错误。 关于 DB 模式,听说 sqlite 根本不限制 VARCHAR,max_length 仅适用于 Django 后端。
【问题讨论】:
-
肯定还有另一种导致问题的代码和平。如果相关,请发布您模型的其他部分。如果没有,请尝试检查您的 DB 架构是否具有最大长度(例如,如果您是 Postgres,请在 pgadmin 中查看)。
-
你在更改字段后运行迁移了吗???
-
我们需要您发布更多上下文,例如您是否进行了迁移或使用 django 表单,以便我们为您提供帮助