Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html Django:如何向特定用户显示特定对象_Html_Django_Django Models_Django Templates_Django Views - Fatal编程技术网

Html Django:如何向特定用户显示特定对象

Html Django:如何向特定用户显示特定对象,html,django,django-models,django-templates,django-views,Html,Django,Django Models,Django Templates,Django Views,我是django的新手,在一个项目中,管理员必须将团队分配给经理,当管理员将团队分配给经理时,它将仅显示给特定的经理。我不知道如何才能做到这一点。如果有人能帮忙,请帮帮我 这是我的.html文件,管理员可以从中将团队分配给经理 <thead> <tr> <th>S No.</th> <th>COMPANY NAME</th> <th>TEAM MEMBER</th> &

我是django的新手,在一个项目中,管理员必须将团队分配给经理,当管理员将团队分配给经理时,它将仅显示给特定的经理。我不知道如何才能做到这一点。如果有人能帮忙,请帮帮我

这是我的.html文件,管理员可以从中将团队分配给经理

<thead>
  <tr>
  <th>S No.</th>
   <th>COMPANY NAME</th>
    <th>TEAM MEMBER</th>
     <th>EMAIL</th>
      <th>ASSIGN TEAM</th>
    </tr>
    </thead>
     <tbody>
     {%for team in object%}
       <tr>
         <form id="form_id" method="POST" action = "{% url 'accept' %}">
           {% csrf_token %}
          <th scope="row"> {{ forloop.counter }}</th>
           <td>{{team.company_name}}</td>
            <td>{{team.team_member}}</td>
             <td>{{team.email}}</td>
              <td>
                 <select name="manager_{{manager.id}}">
                  {% for manager in managers %}
                    <option value ="{{manager.id}}">{{manager.name}}</option>
                  {% endfor %}                                   
                   </select>
               </td>
                 <td>
                     <input class="btn btn-raised btn-primary btn-round waves-effect" type="submit" value="Assign">
                                </td>
                </tr>
                 {% endfor %}
这是适用于manager的my views.py文件,管理员从中接受请求:

def accept(request):
 obj= Create_Team.objects.filter(status='Accept') 
  managers = manager.objects.all()
  if request.method == 'POST':
   acc = manager()
   manager_id = int(request.POST.get('manager', 1))
   acc.manager = manager.objects.get(pk=manager_id)

   return render(request, "admin/accept.html", {"object": obj,  "managers": managers})


def superior(request):
return render(request, 'manager/index-3.html')

我希望每当管理员单击“分配”按钮时,该团队就会显示给该经理。请帮助我。

您的代码有几个问题

  • Create\u团队
    经理
    模型之间没有关系
  • 标记上的
    名称
    属性与用于从
    请求中读取的密钥不匹配。POST
    manager{{manager.id}
    呈现为
    manager
    ,因此
    int(request.POST.get('manager',1))
    将始终返回1
  • 模板中的表单不包含要更新的团队的信息
  • 您不会在任何
    上设置属性
    已选
    。因此,将始终选择第一选择
  • 您没有更新视图中的任何团队
  • 让我们来解决这些问题

    1-我们通过将
    CreateTeam
    中的
    ForeignKey
    添加到
    Manager
    来修复模型。注意,我已经重命名了模型,这是可选的。如果你决定保留你的名字,相应地修改它

    # models.py
    from django.db import models
    
    class CreateTeam(models.Model):
        first_name = models.CharField(max_length= 50)
        last_name = models.CharField(max_length= 50)
        company_name = models.CharField(max_length= 100)
        address = models.CharField(max_length= 1000)
        state = models.CharField(max_length= 100)
        city = models.CharField(max_length= 100)
        status = models.CharField(max_length= 30)
        manager = models.ForeignKey('Manager', on_delete=models.SET_NULL, null=True, blank=True)
    
    
    class Manager(models.Model):
        name = models.CharField(max_length= 500)
        designation = models.CharField(max_length= 500)
    
    您必须将两位信息传递给
    assign
    视图:要分配的
    CreateTeam
    id
    和要分配的
    Manager
    id

    请注意,表单字段的
    name
    属性是
    request.POST
    中的键。这些可以是任何字符串,只要确保它在窗体和视图之间匹配即可。很明显,给他们一个富有表现力的名字会让生活变得更美好

    2-发送
    管理器的
    id
    处理。只需确保
    name
    属性与视图中使用的键匹配即可

    3-要发送团队的
    id
    ,可以使用带有名称和值的
    而不是

    以下是完整的模板:

    <html>
      <head></head>
      <body>
        <table>
          <thead>
            <tr>
              <th>S No.</th>
              <th>COMPANY NAME</th>
              <th>TEAM MEMBER</th>
              <th>EMAIL</th>
              <th>ASSIGN TEAM</th>
            </tr>
          </thead>
          <tbody>
            {%for team in teams%}
            <tr>
              <form id="form_id" method="POST" action="{% url 'accept' %}">
                {% csrf_token %}
                <th scope="row"> {{ forloop.counter }}</th>
                <td>{{team.company_name}}</td>
                <td>{{team.team_member}}</td>
                <td>{{team.email}}</td>
                <td>
                  <select name="manager">
                  {% for manager in managers %}
                  <option value="{{manager.id}}" {% if team.manager.id == manager.id %}selected{% endif %}>{{manager.name}}</option>
                  {% endfor %}
                  </select>
                </td>
                <td>
                  <button class="btn btn-raised btn-primary btn-round waves-effect" type="submit" name="team" value="{{ team.id }}">Assign</button>
                </td>
              </form>
            </tr>
            {% endfor %}
          </tbody>
        </table>
      </body>
    </html>
    
    有三件事值得强调:

  • 我们使用
    get\u object\u或
    而不是
    Model.objects.get
    。顾名思义,如果找不到模型,它将返回404。这可以作为边缘情况的简单错误处理,例如用户操作表单或在用户打开页面时删除管理器。这种错误处理可以改进为更加用户友好,但这只是一个开始
  • 获取对象或404
    可以获取模型或查询集。我们从过滤后的queryset
    teams
    加载团队实例。否则,用户可以操纵表单并将经理分配给状态不是
    Accept
    的团队
  • 保存团队后,我们重定向到
    accept
    页面。这是一种很好的做法,可以确保用户可以重新加载页面,而不会看到
    是否要重新提交此表单
    对话框

  • 最后,确保只有管理员才能访问此视图,例如,通过添加适当的装饰程序。

    您的代码存在几个问题

  • Create\u团队
    经理
    模型之间没有关系
  • 标记上的
    名称
    属性与用于从
    请求中读取的密钥不匹配。POST
    manager{{manager.id}
    呈现为
    manager
    ,因此
    int(request.POST.get('manager',1))
    将始终返回1
  • 模板中的表单不包含要更新的团队的信息
  • 您不会在任何
    上设置属性
    已选
    。因此,将始终选择第一选择
  • 您没有更新视图中的任何团队
  • 让我们来解决这些问题

    1-我们通过将
    CreateTeam
    中的
    ForeignKey
    添加到
    Manager
    来修复模型。注意,我已经重命名了模型,这是可选的。如果你决定保留你的名字,相应地修改它

    # models.py
    from django.db import models
    
    class CreateTeam(models.Model):
        first_name = models.CharField(max_length= 50)
        last_name = models.CharField(max_length= 50)
        company_name = models.CharField(max_length= 100)
        address = models.CharField(max_length= 1000)
        state = models.CharField(max_length= 100)
        city = models.CharField(max_length= 100)
        status = models.CharField(max_length= 30)
        manager = models.ForeignKey('Manager', on_delete=models.SET_NULL, null=True, blank=True)
    
    
    class Manager(models.Model):
        name = models.CharField(max_length= 500)
        designation = models.CharField(max_length= 500)
    
    您必须将两位信息传递给
    assign
    视图:要分配的
    CreateTeam
    id
    和要分配的
    Manager
    id

    请注意,表单字段的
    name
    属性是
    request.POST
    中的键。这些可以是任何字符串,只要确保它在窗体和视图之间匹配即可。很明显,给他们一个富有表现力的名字会让生活变得更美好

    2-发送
    管理器的
    id
    处理。只需确保
    name
    属性与视图中使用的键匹配即可

    3-要发送团队的
    id
    ,可以使用带有名称和值的
    而不是

    以下是完整的模板:

    <html>
      <head></head>
      <body>
        <table>
          <thead>
            <tr>
              <th>S No.</th>
              <th>COMPANY NAME</th>
              <th>TEAM MEMBER</th>
              <th>EMAIL</th>
              <th>ASSIGN TEAM</th>
            </tr>
          </thead>
          <tbody>
            {%for team in teams%}
            <tr>
              <form id="form_id" method="POST" action="{% url 'accept' %}">
                {% csrf_token %}
                <th scope="row"> {{ forloop.counter }}</th>
                <td>{{team.company_name}}</td>
                <td>{{team.team_member}}</td>
                <td>{{team.email}}</td>
                <td>
                  <select name="manager">
                  {% for manager in managers %}
                  <option value="{{manager.id}}" {% if team.manager.id == manager.id %}selected{% endif %}>{{manager.name}}</option>
                  {% endfor %}
                  </select>
                </td>
                <td>
                  <button class="btn btn-raised btn-primary btn-round waves-effect" type="submit" name="team" value="{{ team.id }}">Assign</button>
                </td>
              </form>
            </tr>
            {% endfor %}
          </tbody>
        </table>
      </body>
    </html>
    
    有三件事值得强调:

  • 我们使用
    get\u object\u或
    而不是
    Model.objects.get
    。顾名思义,如果找不到模型,它将返回404。这可以作为边缘情况的简单错误处理,例如用户操作表单或在用户打开页面时删除管理器。这种错误处理可以改进为更加用户友好,但这只是一个开始
  • 获取对象或404
    可以获取模型或查询集。我们从过滤后的queryset
    teams
    加载团队实例。否则,用户可以操纵表单并将经理分配给状态不是
    Accept<html>
      <head></head>
      <body>
        <table>
          <thead>
            <tr>
              <th>S No.</th>
              <th>COMPANY NAME</th>
              <th>TEAM MEMBER</th>
              <th>EMAIL</th>
              <th>ASSIGN TEAM</th>
            </tr>
          </thead>
          <tbody>
            {%for team in teams%}
            <tr>
              <form id="form_id" method="POST" action="{% url 'accept' %}">
                {% csrf_token %}
                <th scope="row"> {{ forloop.counter }}</th>
                <td>{{team.company_name}}</td>
                <td>{{team.team_member}}</td>
                <td>{{team.email}}</td>
                <td>
                  <select name="manager">
                  {% for manager in managers %}
                  <option value="{{manager.id}}" {% if team.manager.id == manager.id %}selected{% endif %}>{{manager.name}}</option>
                  {% endfor %}
                  </select>
                </td>
                <td>
                  <button class="btn btn-raised btn-primary btn-round waves-effect" type="submit" name="team" value="{{ team.id }}">Assign</button>
                </td>
              </form>
            </tr>
            {% endfor %}
          </tbody>
        </table>
      </body>
    </html>
    
    from django.shortcuts import get_object_or_404, redirect, render
    
    from .models import CreateTeam, Manager
    
    def accept(request):
        teams = CreateTeam.objects.filter(status='Accept')
        managers = Manager.objects.all()
        if request.method == 'POST':
            createteam_id = int(request.POST.get('team', 1))
            manager_id = int(request.POST.get('manager', 1))
            createteam = get_object_or_404(teams, pk=createteam_id)
            createteam.manager = get_object_or_404(Manager, pk=manager_id)
            createteam.save()
            redirect('accept')
        return render(request, "admin/accept.html", {"teams": teams,  "managers": managers})