【问题标题】:Pass data between UpdateView and CreateView in Django在 Django 中的 UpdateView 和 CreateView 之间传递数据
【发布时间】:2018-05-31 10:04:31
【问题描述】:

我有两个模型 Permit 和 Course。

class Permit(models.Model):
    name = models.CharField(max_length=50)
    skill_course = models.ManyToManyField(Skill, related_name="+", blank=True)

class Course(models.Model):
    name = models.CharField(max_length=50)
    skills = models.ManyToManyField(Skill, related_name="courses",blank=True,)
    students = models.ManyToManyField(User, related_name="courses",blank=True,)

单击许可对象会显示动态获得许可的学生(在 UpdateView 中使用 GET 方法)。

如何与这些学生一起创建课程?(在 CreateView 中使用 POST 方法)

我必须在 2 个视图之间传递数据吗?我想创建一个 utils.py 文件,在那里创建一个包含数据的方法,我将在其他方法或类中重用,但类或函数将有 requestpk,我不知道如何返回 dict ,因为它应该有请求和模板吗?我被困在这里,非常感谢您的帮助,在此先感谢......

【问题讨论】:

  • 您能解释一下为什么将+ 用作related_name 吗?这不是一个有效的 Python 标识符,这意味着当您想要获得课程许可时,它可能会导致很多问题。
  • 通常您不会直接传递数据,而是在POST 请求中进行编码:例如带有许可名称/标识符的POST
  • @WillemVanOnsem 使用“+”作为相关名称是有效的,用于不创建向后关系;请查看docs.djangoproject.com/en/2.0/ref/models/fields/…

标签: django python-3.x web-services dynamically-generated create-view


【解决方案1】:

首先你应该在setting.py中激活session middleware

然后使用这样的东西:

   def update_project_filter(request):
    ...
    selected_project_id = project_form.cleaned_data["Project_Name"].id
    request.session['selected_project_id'] = selected_project_id
    ...

def update_project(request):
    ...
    selected_project_id = request.session.get('selected_project_id')
    ...def update_project_filter(request):
    ...
    selected_project_id = project_form.cleaned_data["Project_Name"].id
    request.session['selected_project_id'] = selected_project_id
    ...

def update_project(request):
    ...
    selected_project_id = request.session.get('selected_project_id')
    ...

【讨论】:

    猜你喜欢
    • 2015-06-25
    • 1970-01-01
    • 2023-03-04
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 2019-11-06
    • 2012-06-18
    相关资源
    最近更新 更多