我有两个视图:一个用于显示已分配用户的列表和用于分配新用户的POST方法.

第二个视图:从usecase_assigned表中删除用户并重定向到同一页.

我在一个模板中显示了所有内容,然后按下删除按钮,它将执行另一个视图并重定向到同一页面(UsecaseDetails.html): 第一视图具有用例ID,如何从第二视图删除并重定向到具有用例ID的第一视图?

我的模特:

class User(models.Model):
   user_email = models.CharField(primary_key=True, max_length=100)
   user_role_id = models.CharField(max_length=20)
   user_password = models.CharField(max_length=20)
   user_name = models.CharField(max_length=100)

class Usecase(models.Model):
   usecase_id = models.CharField(primary_key=True, max_length=20)
   usecase_name = models.CharField(max_length=256)
   user_email = models.ForeignKey('User', models.DO_NOTHING, db_column='user_email')
   usecase_type = models.ForeignKey('UsecaseType', models.DO_NOTHING)

class UsecaseAssign(models.Model):
   usecase_assign_date = models.DateTimeField(primary_key=True, auto_now_add=True)
   usecase = models.ForeignKey(Usecase, models.DO_NOTHING)
   user_email = models.ForeignKey('User', models.DO_NOTHING, db_column='user_email')
   usecase_role_id = models.CharField(max_length=20)

我的观点是:

@user_login_required
def view_usecase_details(request, ucid):
   usecase_details = Usecase.objects.filter(usecase_id=ucid).all()
   usecase_details = usecase_details.prefetch_related("usecaseids")
   users = User.objects.all() #SELECT user_email FROM usecase_assign WHERE usecase_id LIKE 'NN245';
   usecase_assigned = UsecaseAssign.objects.select_related('user_email').values_list('user_email__user_name').filter(usecase_id=ucid) #to show list of users working on uc
   user_assigned = UsecaseAssign.objects.values_list('user_email').filter(usecase_id=ucid) #to show list of users working on uc
   print(user_assigned)


   if request.method=='POST' and 'assignuser' in request.POST:
       user_email = request.POST['user_email']
       userAssignCheck = UsecaseAssign.objects.filter(user_email=user_email, usecase_id=ucid)
       if userAssignCheck:
           messages.error(request, "user already added!")
           return HttpResponseRedirect(reverse('usecase-details', args=[ucid]))
       else:
           userAssignObj = UsecaseAssign.objects.create(user_email_id=user_email, usecase_id=ucid)

       if userAssignObj:    
           messages.success(request, "User was Successfully Assigned with Usecase!")
           return HttpResponseRedirect(reverse('usecase-details', args=[ucid]))

   context = {'usecase_details': usecase_details, "users": User.objects.all(), 'usecase_assigned':usecase_assigned, "users": users, "user_assigned": user_assigned}
   return render(request, 'UsecaseDetails.html', context)   

@user_login_required
def unassign_emp(request, eid):
   if request.method=='POST' and 'unassign_emp' in request.POST:
       unassign_emp = UsecaseAssign.objects.get(user_email=eid)
       unassign_emp.delete()
       messages.success(request, "User was unassigned with Usecase!")
   return redirect('usecase-details') #my question is in here how to pass ucid (usecase_id)

我的模板:

{% for result in usecase_details %}
<div class="card card-body shadow-sm mb-4 mb-lg-0">
    <form class="mb-card" action="{% url 'usecase-details' ucid=result.usecase_id %}" method="POST">
        {% csrf_token %}
        <div class="form-row mb-4">
          <div class="col-lg-8 mr-f">
            <label class="h5" for="user_email">Assign new users:</label>
            <select name="user_email" class="custom-select my-1 mr-sm-2" id="user">
                <option value="0" selected>Select</option>
                {% for user in users %}
                <option value="{{ user.user_email }}">{{ user.user_name }}</option>
                {% endfor %}                             
              </select>    
            </div>
        </div>
        <input type="submit" class="btn btn-primary" name="assignuser" value="Submit Changes">
      </form>
      <ul class="list-group list-group-flush">
        <li class="list-group-item d-flex align-items-center justify-content-between px-0 border-bottom">
            <div>
                <label class="mb-card h5" for="user_email">Assigned users:</label>
                {% for user in usecase_assigned %}
                <p>{{user|join:', '}}</p>
                {% endfor %}
                {% for unassign in user_assigned %}
                <form action="{% url 'unassign_emp' unassign %}" method="POST" style="display: inline !important;">
                    {% csrf_token %}
                    <input type="submit" class="btn btn-primary" name="unassign_emp" value="Delete">
                  </form>
                  {% endfor %}
            </div>
            </div>          
        </li>
    </ul>
</div>
{% endfor %}

我的URL:

    path('usecase-details/<str:ucid>', av.view_usecase_details, name="usecase-details"),
    path('unassign-emp/<str:eid>/', av.unassign_emp, name="unassign_emp"),

推荐答案

@user_login_required
def unassign_emp(request, eid):
   if request.method=='POST' and 'unassign_emp' in request.POST:
       unassign_emp = UsecaseAssign.objects.get(user_email=eid)
       unassign_emp.delete()
       messages.success(request, "User was unassigned with Usecase!")
   return redirect('usecase-details', kwargs={'ucid':unassign_emp.usecase_id})

您可以将kwargs参数传递给重定向.更多信息:https://docs.djangoproject.com/en/4.1/topics/http/shortcuts/#django.shortcuts.redirect

Django相关问答推荐

如何在uwsgi中创建单个日志(log)文件?

django re_path() 函数模式与包含该模式的 url 不匹配

SQLite上可以正常使用Many2Many链接注释,但MariaDB上无法正常使用(生产环境)

有没有办法在Django中按需/点击仅获取和序列化一部分数据以提高性能?

当从 fastapi 发送请求时,Django 无法对 Postgres 执行查询

CsrfViewMiddleware 和 enforce_csrf 有什么区别?

使用 Crispy Forms 时 Django 返回 'TemplateDoesNotExist'

Django 获取用户创建的对象,这些用户属于用户列表

如何在没有此前缀的情况下修复此 django 路径?

Django过滤器查询外键

Python / Django 中的 Unicode 与 UTF-8 混淆?

可以在基于 Django 类的视图中设置实例变量吗?

在 Django 中,您可以向查询集添加方法吗?

如何在 django-rest-framework 中为 API 使用 TokenAuthentication

virtualenv(python3.4), pip install mysqlclient 错误

如何按名称设置 django 模型字段?

如何从 Django 的 TabularInline 管理视图中省略对象名称?

为整个结果集向 Django Rest Framework 结果添加额外数据

Django:必须使用对象 pk 或 slug 调用通用详细视图

如何更改 django 模板中布尔值的打印方式?