多个字段或外键Django如果希望有多个提交具有相同的ID但不同的细节

时间:2017-06-29 17:51:41

标签: python django database models

我的timesheet.html将包含ID,name,startDate和endDate变量。我希望在list_timesheet.html的表格中显示所有这些字段。但我有一个问题是显示相同的ID和相同名称多次具有不同的开始和结束日期。有没有人知道我应该怎么做我的models.py?现在我只能提交具有相同ID和名称ONCE的时间表,因为外键问题,当我尝试提交具有相同ID和名称但不同的开始和结束日期的时间表时,它将显示错误说“学生ID”和学生姓名已经存在“。

models.py

ERROR 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT NULL,
  PRIMARY KEY (`postcommit_si_flags_id`),
  UNIQUE INDEX `software_ima' at line 5
SQL Statement:
CREATE TABLE `aci_dev`.`postcommit_si_flags` (
  `postcommit_si_flags_id` INT NOT NULL AUTO_INCREMENT,
  `software_image_id` INT UNIQUE NOT NULL,
  `bypass_testcase_failure` TINYINT NOT NULL,
  `base_meta`  NOT NULL,
  PRIMARY KEY (`postcommit_si_flags_id`),
  UNIQUE INDEX `software_image_id_UNIQUE` (`software_image_id` ASC),
  CONSTRAINT `software_image_id`
    FOREIGN KEY (`software_image_id`)
    REFERENCES `aci_dev`.`software_images` (`software_image_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)

1 个答案:

答案 0 :(得分:0)

  

当我尝试提交带有相同ID和姓名但不同的开始和结束日期的时间表时,会显示错误,上面写着“学生ID和学生姓名已存在”。

是的,Django引发错误,不是因为ForeignKey,而是因为字段studentID设置为primary_key=True。另外,还要从primary_key=True模型中的ForeignKey中删除LTimesheet

如果你想保存多个具有相同ID和名称的Timesheet个对象,那么我会建议模型有点像这样,

class Timesheet(models.Model):
    studentID = models.CharField("Student ID", max_length=8, default="")
    studentName = models.CharField("Student Name", max_length=500, default="", null=True, blank=True)
    startDate = models.DateField("Start Date", max_length=8, null=True, blank=True)
    endDate = models.DateField("End Date", max_length=8, null=True, blank=True)

    def __str__(self):
        return self.studentID 

class LTimesheet(models.Model):
    timesheet = models.ForeignKey(Timesheet, on_delete=models.CASCADE)
    status = models.CharField("Status", max_length=100)