首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在自定义模型字段类型中创建自定义验证?

如何在自定义模型字段类型中创建自定义验证?
EN

Stack Overflow用户
提问于 2022-10-17 13:34:53
回答 1查看 33关注 0票数 0

我正在尝试做一个学校管理系统,超级用户谁可以添加新的学生(和老师以后)的数据库也必须进入学生的课程。但是,我想将验证用于不同的目的:

  1. 学生至少需要从英语和数学字段中选择最多一个选项(如果不需要进一步验证),

  1. 学生需要至少选修1门科学,最多需要2->需要验证,以确保课程不被选修两次。

  1. 学生可以从科学、艺术和社会选修三门课程,但不能上两次相同的课程。

如果这个问题很愚蠢,或者代码中有任何错误,我很抱歉,因为我在3天前开始学习django和html来完成一个学校项目。我读了django文档,希望得到答案,但我找不到我要找的东西。

代码语言:javascript
复制
class Student(models.Model):
    student_number = models.PositiveIntegerField()
    first_name = models.CharField(max_length=50) 
    last_name = models.CharField(max_length=50) 
    email = models.EmailField(max_length=100)

    class English(models.TextChoices):
        LANGLIT = 'LL', _('Language and literature')
        LIT = 'L', _('Literature')

    english = models.CharField(max_length=2, choices=English.choices, default=English.LANGLIT)

    class Math(models.TextChoices):
        AA = 'AA', _('Analysis & Approaches')
        AI = 'AI', _('Analysis & Interpretation')

    math = models.CharField(max_length=2, choices=Math.choices, default=Math.AA)

    class Language(models.TextChoices):
        FRENCH = 'F', _('French')
        SPANISH = 'S', _('Spanish')
        ARABIC = 'A', _('Arabic')
        MANDARIN = 'M', _('Mandarin')

    language = models.CharField(max_length=1, choices=Math.choices, default=Language.FRENCH)

    class Science(models.TextChoices):
    BIOLOGY = 'BIO', _('Biology')
    CHEMISTRY = 'CHEM', _('Chemistry')
    PHYSICS = 'PHY', _('Physics')
    COMPUTERSCIENCE = 'CS', _('Computer Science')
    DESIGNTECHNOLOGY = 'DT', _('Design Technology')
    ESS = 'ESS', _('Environmental Systems and Societies')

    science = models.CharField(max_length=4, choices=Science.choices, default=Science.BIOLOGY)

    class Society(models.TextChoices):
        MANAGEMENT = 'BM', _('Business Management')
        ECONOMICS = 'ECON', _('Economics')
        GEOGRAPHY = 'GEO', _('Geography')
        GLOBALPOLITICS = 'GP', _('Global Politics')
        HISTORY = 'HIS', _('History')
        PSYCHOLOGY = 'PSYCH', _('Psychology')

    class Art(models.TextChoices):
        VISUALARTS = 'VA', _('Visual Arts')
        MUSIC = 'MUS', _('Music'),
        FILM = 'FILM', _('Film')

def __str__(self):
    return f'{self.first_name} {self.last_name}'
EN

回答 1

Stack Overflow用户

发布于 2022-10-17 13:56:36

您可以使用ValidationError并应用任何您想要的逻辑。

示例:

代码语言:javascript
复制
from django.core.exceptions import ValidationError

def validate_mail(value):
    if "@mail.com" in value:
        return value
    else:
        raise ValidationError("This field accepts mail only")

class MailModel(models.Model):
      mail = models.CharField(
                     max_length = 200,
                     validators =[validate_mail]
                     )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74098166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档