Django 模型 - 使用 Shell 插入外键值

Jor*_*dan 4 django django-models

我正在尝试通过 Django Shell 保存我的模型的值。我是 Django 的初学者。我已经装箱了三个模型。我在模型中逐一插入值。我首先创建了部门并插入了所有部门值。创建了学生并插入了所有与学生相关的值。现在我尝试在包含两个外键 StudentId 和 dept id 的课程中​​插入值。如何使用 Django Shell 为 Student 模型插入值。

    # -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models

# Create your models here.
from django.db import models
from django.utils import timezone

class Student(models.Model):
    studentId = models.AutoField(primary_key=True)
    firstname = models.CharField(max_length=50)
    middlename = models.CharField(max_length=1)
    lastname = models.CharField(max_length=50)
    city = models.CharField(max_length=200)
    registe_dt = models.DateTimeField(default=timezone.now())
    def __str__(self):
        return '%s %s %s' % (self.studentId, self.firstname,self.city)


class Dept(models.Model):
    deptId = models.AutoField(primary_key=True)
    deptName = models.CharField(max_length=200)
    def __str__(self):
        return '%s %s' % (self.deptId, self.deptName)

class Course(models.Model):
    courseId=models.AutoField(primary_key=True)
    courseName=models.CharField(max_length=100)
    student = models.ManyToManyField(Student)
    dept = models.ForeignKey(Dept,on_delete=models.CASCADE)
    def __str__(self):
        return '%s %s %s %s' % (self.courseId, self.courseName,self.student.primary_key,self.dept.primary_key)
Run Code Online (Sandbox Code Playgroud)

谢谢你对乔丹的帮助

Ved*_*ran 5

插入外键值时可以直接插入student和dept实例:

student = Student.objects.last()
dept = Dept.objects.last()

course = Course.objects.create(courseName="My course", student=student, dept=dept)
Run Code Online (Sandbox Code Playgroud)

.last()是最后创建的,但您可以根据需要获取实例。


此外,您不需要手动创建主键。Django 自动为你做这件事。模型的每个实例都会pk自动分配一个值。也就是说,如果您不需要不同名称的主键。所以__str__方法Course可以是:

def __str__(self):
        return '%s %s %s %s' % (self.courseId, self.courseName,self.student.pk,self.dept.pk)
Run Code Online (Sandbox Code Playgroud)