今天Django的教训汇总:
1.未在项目中添加应用,就去admin查看模型。
2.修改模型应一个个来,而不是三个模型一起修改。
3.修改模型后,跑错了路径。居然去到别的项目路径。
4.修改模型,只跑了python manage.py makemigrations,居然忘记python manage.py migrate
正确顺序是:
1.在workspace新增项目django-admin.py startproject training_system
CMD
C:\Users\Season\workspace2>django-admin.py startproject training_system
2.在项目路径django-admin.py startproject app
CMD
C:\Users\Season\workspace2\training_system>django-admin.py startproject app
3.在项目setting.py中注册app
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myclass',
]
4.定义models。注意定义id时,null=True或有默认值default=0。以下为多对多模型的范例。
from django.db import models
class Employee(models.Model):
eid = models.CharField(max_length=200,null=True)
name = models.CharField(max_length=200)
gender = models.CharField(max_length=200)
on_board_date = models.DateTimeField('date on board')
def __str__(self):
return self.name
class Teacher(models.Model):
tid = models.CharField(max_length=200,null=True)
name = models.CharField(max_length=200,null=True)
on_board = models.BooleanField(null=True)
gender = models.CharField(max_length=200,null=True)
teacher_grade = models.IntegerField(default=0)
def __str__(self):
return self.name
class Subject(models.Model):
Subject_id = models.CharField(max_length=200,null=True)
subject_name = models.CharField(max_length=200)
teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE,null=True)
employee = models.ManyToManyField(Employee, through='Employee_Subject')
def __str__(self):
return self.subject_name
class Employee_Subject(models.Model):
employee = models.ForeignKey(Employee,on_delete=models.CASCADE)
subject = models.ForeignKey(Subject,on_delete=models.CASCADE)
5.python manage.py makemigrations 和 python manage.py migrate依次进行,不可遗漏。
C:\Users\Season\workspace2\training_system>python manage.py makemigrations
6.请先在admin登记模型。再进入admin后台管理界面去查看模型。
from django.contrib import admin
from myclass.models import Employee, Subject, Teacher, Employee_Subject
# Register your models here.
class EmployeeAdmin(admin.ModelAdmin):
list_display = ('eid', 'name')
admin.site.register(Employee)
admin.site.register(Subject)
admin.site.register(Teacher)
admin.site.register(Employee_Subject)