我有一个模型形式,用户可以输入他们的生物。我不希望生物超过10行。我想知道在哪里以及如何实现这一目标?
以下是模型:
new \Illuminate\Support\Collection(json_decode($flights, true))
更新 感谢electrometro的回答,我将此验证方法添加到模型中:
class UserProfile(models.Model):
username = models.OneToOneField(User)
name = models.CharField(max_length=30)
bio=models.TextField(blank=True)
但它不能正常工作,也就是说,它允许bios超过10行。这有什么不对?
答案 0 :(得分:2)
在验证表单时,您可以轻松地将文本分割为新行字符的编号,然后只获取该列表的长度。然后,如果它太长,你可以通过在表单清理方法上引发ValidationError
来将表单作为无效发回。
唯一的问题是它没有对数据库进行逻辑/验证检查。因此,您需要在使用表单的任何地方执行此操作。
有关更多信息,请查看Django表单验证here.
修改强>
要将文本拆分为列表,只需rows = text.split('\n')
,然后获取该列表的长度rows_length = len(rows)
。那会告诉你文本有多少行。您必须在表单验证中执行此操作。
答案 1 :(得分:1)
You can do this, for example:
def max_ten_lines(value):
rows = value.split('\n')
if len(rows) > 10:
raise ValidationError("bio too long!")
class UserProfile(models.Model):
username = models.OneToOneField(User)
name = models.CharField(max_length=30)
bio = models.TextField(blank=True, validators=[max_ten_lines])