Queryset для текущего вошедшего в систему пользователя Django - PullRequest
0 голосов
/ 16 октября 2018

Я делаю набор запросов с моей моделью.Теперь набор запросов отображает все данные на моей HTML-странице.Но я хочу отображать только данные зарегистрированных пользователей.

models.py

class Data(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
Status = models.CharField(max_length=10, blank=False)
Date = models.DateField(blank=True, null=True)

views.py

@login_required
def search(request):
    status_list = Data.objects.all()
    status_filter = UserFilter(request.GET, queryset=status_list)
    return render(request, 'users/data.html', {'filter': status_filter})

filters.py

class UserFilter(django_filters.FilterSet):

class Meta:
    model = Data
    fields = {
        'Date': ['year','month', ], 'user': ['exact', ],
    }

Я пытался использовать разные views.py , но это не сработало.

@login_required
def search(request, user):

    status_list = Data.objects.get(user=self.request.user).search(query)
    status_filter = UserFilter(request.GET, queryset=status_list)
    return render(request, 'users/data.html', {'filter': status_filter})

data.html

<!DOCTYPE html>
{% load django_tables2 %}
{% load staticfiles %}
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>

  </head>
  <body>

{% block content%}


      <form method="get">
        {{ filter.form.as_table }}
        </select>
        <button type="submit" class="btn btn-primary">
        <span class="glyphicon glyphicon-search"></span> Search
      </button>
      </form>
      <ul>
        {% for user in filter.qs %}
        <li>{{ user.username }} - {{ user.get_full_name }}</li>
        {% endfor %}
      </ul>

    <table id="datatable" style="margin-top: 20px" style="margin- 
    bottom:20px" class="table table-bordered" >
    <thead>
      <tr>
        <th>user</th>
        <th>EndDate</th>
        <th>Status</th>

      </tr>
    </thead>
    <tbody>
      {% for Data in filter.qs %}
        <tr>
          <td>{{ Data.user }}</td>
          <td>{{ Data.EndDate }}</td>
          <td>{{ Data.Status }}</td>
        </tr>
      {% empty %}
        <tr>
          <td colspan="5">No data</td>
        </tr>
      {% endfor %}
    </tbody>
    </table>


{% endblock content%}



  </body>

Выше я также добавил свой HTML-код. Пожалуйста, посмотрите также HTML-код.

Ответы [ 4 ]

0 голосов
/ 17 октября 2018

Могут быть лучшие способы сделать это.Поскольку вы все еще учитесь ниже, код делает свое дело.

@login_required
def search(request, *args, **kwargs):
    status_list = Data.objects.get(user=request.user)

    month = request.GET.get("month", None)
    year = request.GET.get("year", None)

    if month:
        status_list = status_list.filter(Date__month=month)

    if year:
        status_list = status_list.filter(Date__year=year)

    return render(request, 'users/data.html', {'filter': status_list})
0 голосов
/ 16 октября 2018
status_list = Data.objects.get(user=self.request.user) 

неверно, поскольку self используется только в представлениях на основе классов.Не удивительно, что это не сработало.Пожалуйста, попробуйте с кодом ниже вместо

status_list = Data.objects.filter(user=request.user) or 
status_list = Data.objects.get(user=request.user)

Итак, окончательный код будет выглядеть как

@login_required
def search(request):
    status_list = Data.objects.get(user=request.user)
    render(request, 'users/data.html', {'filter': status_list})
0 голосов
/ 16 октября 2018

Ниже код должен работать нормально.

 {% for data in filter %}
     <li>{{ data.user.username }} - {{ data.user.get_full_name }}</li>
 {% endfor %}

 {% for Data in filter %}
    <tr>
      <td>{{ Data.user }}</td>
      <td>{{ Data.Date }}</td>
      <td>{{ Data.Status }}</td>
    </tr>
  {% empty %}

Так как вы не будете использовать фильтры, поэтому filters.py следует удалить.
Это также не будет работать.Внесите изменения по мере необходимости.{{filter.form.as_table}}

0 голосов
/ 16 октября 2018

Вы можете упростить ваш код, django предоставляет множество вспомогательных функций, чтобы помочь программисту.

в ваших views.py вы можете сделать:

@login_required
def search(request):
    status_list = Data.objects.all()
    status_filter = status_list.filter(user=request.user) //get current user id
    return render(request, 'users/data.html', {'filter': status_filter})
...