如何强制在ModelForm字段中输入的行数

时间:2015-09-01 20:15:26

标签: django django-models django-forms

我有一个模型形式,用户可以输入他们的生物。我不希望生物超过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行。这有什么不对?

2 个答案:

答案 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])