【问题标题】:Django Only non-relations and foreign keys permittedDjango 只允许非关系和外键
【发布时间】:2020-12-02 03:16:26
【问题描述】:

我正在尝试在这里创建一个脚本来查看我的教职员工表列表,该列表分析教职员工的电子邮件地址并将其与系统中的登录名进行比较以将其分配给他们的教室,但我的脚本不断崩溃。

目标是什么? 目标是我有一张名为sections 的表,sections 是教室。每个教室都有一个老师分配给他们。但是,为了让老师看到他们被分配到的教室,我通过用户登录名(即他们的电子邮件地址)来链接它。但是,尽管我的打印语句中的逻辑确实适用于我的查询,但它无法更新多对多字段。这是我的代码。

FUNCTION

def AssignLoginToSection():
  users = User.objects.all()
  for user_email in users:
    email = user_email.email 
    print('Getting Email addresses in system.')
    if Section.objects.filter(staffpsid__email = email):
      section = Section.objects.filter(staffpsid__email = email)
      print("Found Matching Login Name.")
      print('The following sections were found with this users email.', section)
      Section.objects.filter(staffpsid__email = email).update(teacher_username= email)
      print('Added user login name to section.')
    else:
     print("No matching login name.")
  return("Done")   

MODELS

# Section Information Stored
class Section(models.Model):
    sectionpsid= models.CharField(primary_key = True, default = "", max_length = 50)
    schoolpsid = models.ForeignKey(School,on_delete = models.CASCADE, default = "" ,)
    coursepsid = models.ForeignKey(Course,on_delete = models.CASCADE, default = "" ,) 
    termpsid = models.ForeignKey(Term,on_delete = models.CASCADE, default = "" ,) 
    section_number = models.CharField(default = "", max_length = 50)
    expression = models.CharField(default = "", max_length = 50)
    external_expression= models.CharField(default = "", max_length = 50)
    staffpsid = models.ForeignKey(Staff,on_delete = models.PROTECT, default = "" ,) 
    gradebooktype = models.CharField(default = "", max_length = 50)
    teacher_username = models.ManyToManyField(User)
 
# Staff Information Stored
class Staff(models.Model):
    staffpsid= models.CharField(primary_key = True, default = "", max_length = 50)
    first_name = models.CharField(max_length = 50, default = "")
    last_name = models.CharField(max_length = 50, default = "")
    staff_name = models.CharField(max_length = 50, default = "")
    email = models.EmailField(default = "", unique = True)
    staff_cell = models.CharField(max_length = 12, default = "")
    users_dcid = models.CharField(max_length = 5, default = "")   

    

我得到的错误是无法更新模型字段 (只允许非关系和外键)。

【问题讨论】:

    标签: python django django-models django-views


    【解决方案1】:

    ManyToManyField 适用于添加或删除方法

    而不是:

    Section.objects.filter(staffpsid__email = email).update(teacher_username= email)
    

    使用:

    section.teacher_username.add(user_email.id)
    

    【讨论】:

    • 我得到的错误消息是...'QuerySet'对象没有属性'save'
    • 编辑了最后一个答案。你使用多对多,你应该使用 add 方法。在多对多中,您不能使用更新或保存方法,但可以使用添加和删除方法
    • 由于有多个项目,我不得不为部分执行另一个 for 循环,但这有效。谢谢礼萨
    • 很高兴我能提供帮助
    猜你喜欢
    • 1970-01-01
    • 2012-12-29
    • 2020-08-03
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    相关资源
    最近更新 更多