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

How to enforce number of lines entered in a ModelForm field

我有一个模型表单,用户可以在其中输入他们的简历。我不希望简历超过 10 行。我想知道在哪里以及如何实现这一目标?

这是模型:

class UserProfile(models.Model):
    username =  models.OneToOneField(User)
    name = models.CharField(max_length=30)
    bio=models.TextField(blank=True)

更新: 感谢 electrometro 的回答,我在模型中添加了这个验证方法:

def enforce_bio(self):
        bio = self.cleaned_data['bio']
        rows = bio.split('\n')
        if len(rows) > 10:
            raise forms.ValidationError("bio too long!")

        else:
            return bio

但它不能正常工作,也就是说,它允许 bios 超过 10 行。这里有什么问题?

在验证表单时,您可以轻松地将文本按换行符的数字拆分,然后只获取该列表的长度。然后,如果它太长,您可以通过在表单清理方法上引发 ValidationError 将表单作为无效发回。

唯一的问题是它没有对数据库进行 logic/validation 检查。因此,您需要在使用表单的任何地方执行此操作。

有关更多信息,请查看 Django 表单验证 here.

编辑:

要将文本拆分成一个列表,只需 rows = text.split('\n'),然后获取该列表的长度,它将是 rows_length = len(rows)。那会告诉你文本有多少行。您必须在表单验证中执行此操作。

您可以这样做,例如:

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