首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个ESL学校的Django模型

一个ESL学校的Django模型
EN

Stack Overflow用户
提问于 2021-04-25 11:14:05
回答 2查看 46关注 0票数 0

我正在为ESL (英语作为第二语言)学院建立一个管理界面,它基本上是一个人们学习英语的语言学校。

我已经为每个应用程序准备了我的模型,我真的很希望有人能对它们进行审查,并在设计中向我提供建议和可能的错误。

ez_core应用程序的模型

代码语言:javascript
复制
GENDER_CHOICES = [
    ('Female', 'Female'),
    ('Male', 'Male')
]

STREET_ADDRESS_CHOICES = [
    ('A', 'A'),
    ('B', 'B')
]

EDUCATIONAL_LEVEL_CHOICES = [
    ('Bachelor\'s Degree', 'Bachelor\'s Degree'),
    ('Master\'s Degree', 'Master\'s Degree'),
    ('PhD Degree', 'PhD Degree'),
]

CONTACT_RELATIONSHIP_CHOICES = [
    ('Brother', 'Brother'),
    ('Father', 'Father'),
    ('Mother', 'Mother'),
    ('Sister', 'Sister'),
    ('Uncle', 'Uncle'),
    ('Wife', 'Wife'),
]

MEDICAL_CONDITION_CHOICES = [
    ('Chronic Disease', 'Chronic Disease'),
    ('Allergies', 'Allergies')
]


class PersonalInfo(models.Model):
    full_name = models.CharField(max_length=100)
    phone_number = models.CharField(max_length=100)
    email_address = models.EmailField(max_length=100)
    birthdate = models.DateField()
    gender = models.CharField(max_length=6, choices=GENDER_CHOICES)
    personal_id_number = models.CharField(max_length=100)
    passport_number = models.CharField(max_length=100)
    personal_photo_link = models.CharField(max_length=100)
    id_card_attchment_link = models.CharField(max_length=100)
    passport_attachment_link = models.CharField(max_length=100)
    street_address = models.CharField(
        max_length=100, choices=STREET_ADDRESS_CHOICES)
    address_reference_point = models.CharField(max_length=100)
    educational_level = models.CharField(
        max_length=100, choices=EDUCATIONAL_LEVEL_CHOICES)
    specialization = models.CharField(max_length=100)
    contact_phone_number = models.CharField(max_length=100)
    contact_name = models.CharField(max_length=100)
    contact_relationship = models.CharField(
        max_length=100, choices=CONTACT_RELATIONSHIP_CHOICES)
    medical_condition = models.CharField(
        max_length=100, choices=MEDICAL_CONDITION_CHOICES)
    medication = models.CharField(max_length=100)

    class Meta:
        abstract = True

ez_course应用程序的模型

代码语言:javascript
复制
COURSE_TYPE_CHOICES = [
    ('Adults', 'Adults'),
    ('Kids', 'Kids')
]

COURSE_TITLE_CHOICES = [
    ('General English', 'General English'),
    ('Big English', 'Big English'),
    ('Supermind', 'Supermind'),
    ('Business', 'Business'),
    ('UK Visa', 'UK Visa'),
    ('IELTS', 'IELTS'),
]


class CourseDays(models.Model):
    date = models.DateField()


class Course(models.Model):
    course_type = models.CharField(max_length=100, choices=COURSE_TYPE_CHOICES)
    course_title = models.CharField(
        max_length=100, choices=COURSE_TITLE_CHOICES)
    course_description = models.TextField()
    course_start_time = models.TimeField()
    course_end_time = models.TimeField()
    # teachers
    course_cost = models.IntegerField()
    course_days = models.ManyToManyField(CourseDays)

ez_staff应用程序的模型

代码语言:javascript
复制
from ez_core.models import PersonalInfo
from ez_course.models import Course

POSITION_CHOICES = [
    ('Teacher Assistant', 'Teacher Assistant'),
    ('Volunteer', 'Volunteer'),
    ('Teacher', 'Teacher'),
    ('Service', 'Service'),
    ('Intern', 'Intern'),
    ('Admin', 'Admin'),
    ('Boss', 'Boss'),
]


class Staff(PersonalInfo):
    is_married = models.BooleanField(default=False)
    number_of_children = models.IntegerField()
    start_working_date = models.DateField()
    position = models.CharField(max_length=100, choices=POSITION_CHOICES)
    taught_courses = models.ManyToManyField(Course, blank=True)
    is_active = models.BooleanField(default=True)
    inactivity_reason = models.CharField(max_length=100, blank=True, null=True)

ez_student应用程序的模型

代码语言:javascript
复制
from ez_core.models import PersonalInfo
from ez_course.models import Course


class DailyAttendance(models.Model):
    date = models.DateField()
    first_hour = models.BooleanField(default=False)
    second_hour = models.BooleanField(default=False)
    leave = models.BooleanField(default=False)


class Test(models.Model):
    test_title = models.CharField(max_length=100)
    test_max_score = models.IntegerField()
    test_score = models.IntegerField()
    test_date = models.DateField()


class Student(PersonalInfo):
    has_bus_service = models.BooleanField(default=False)
    is_postponed = models.BooleanField(default=False)
    postpone_reason = models.CharField(max_length=100, blank=True, null=True)
    courses = models.ForeignKey(Course, on_delete=models.CASCADE)
    daily_attendance = models.ManyToManyField(
        DailyAttendance, blank=True)
    tests = models.ManyToManyField(Test)
EN

回答 2

Stack Overflow用户

发布于 2021-04-25 11:47:47

一切都很好。我认为一个强大的电话号码字段应该是

代码语言:javascript
复制
phone_regex = RegexValidator(
        regex=r'^(05)\d{9}$',
        message=phone_message
    )
票数 0
EN

Stack Overflow用户

发布于 2021-04-25 15:10:15

一切看起来都很好,只是我认为在数字方面,使用IntegerField()可能比使用CharField()更好:

代码语言:javascript
复制
phone_number = models.IntegerField()
contact_phone_number = models.IntegerField()

还包括:

代码语言:javascript
复制
personal_photo_link = models.CharField(max_length=100)

我认为:(max_length = 100)对于链接来说是不够的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67252728

复制
相关文章

相似问题

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