0

特定の列に基づく一意の値のみを表示するテーブルを作成しようとしています。次のコードはエラーを表示しませんが、意図したとおりに一意の値を表示しません - 間違いがどこにあるかアイデアはありますか?

なぜこれでうまくいかないのでしょうか?return self.name.distinct('name')

たとえば、Rob には 3 つの住所があるため、テーブルには 3 つの行がありますが、Rob、John、および Clayton を表示するリストをアプリで作成しており、Rob を 1 回だけ表示させたいと考えています。

ビュー.py

from django.http import HttpResponse
from django.views.generic import TemplateView,ListView
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.urls import reverse_lazy
from .models import Book

class BookList(ListView):
    model = Book

class BookCreate(CreateView):
    model = Book
    fields = ['name', 'address', 'birthdate', 'deathdate', 'description']
    success_url = reverse_lazy('books_cbv:book_list')

class BookUpdate(UpdateView):
    model = Book
    fields = ['name', 'address', 'birthdate', 'deathdate', 'description']
    success_url = reverse_lazy('books_cbv:book_list')


class BookDelete(DeleteView):
    model = Book
    success_url = reverse_lazy('books_cbv:book_list')

models.py

from django.db import models
from django.urls import reverse


class Book(models.Model):
    name = models.CharField(max_length=200)
    address = models.CharField(max_length=200, default='none')
    birthdate = models.CharField(max_length=200, default='none')
    deathdate = models.CharField(max_length=200, default='none')
    description = models.CharField(max_length=1000, default='none')

    def __str__(self):
        return self.name.distinct('name')

    def get_absolute_url(self):
        return reverse('books_cbv:book_edit', kwargs={'pk': self.pk}) 

book_list.html

{% extends "base.html" %}

{% block content %}

<h2><a href="{% url 'books_cbv:book_list' %}">Home</a>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
</h2>

<ul style="position: absolute; top:50%; left:50%; list-style-type: none">
    {% for book in object_list %}
    <li style="margin-bottom: 25px;">
    <div class="card" style="width: 18rem;">
      <div class="card-body">
        <h5 class="card-title">{{ book.name }}</h5>
        <h6 class="card-subtitle mb-2 text-muted">{{ book.address }}</h6>
        <!-- add a new {{ photos.image }} for statement here to add horizontal gallery -->
        <p class="card-text">{{ book.description }}</p>
        <a href="{% url 'books_cbv:book_edit' book.id %}">Edit</a>
        <a href="{% url 'books_cbv:book_delete' book.id %}">Delete</a>
      </div>
    </div>
    </li>
    {% endfor %}
</ul>

<a href="{% url 'books_cbv:book_new' %}">New</a>

{% endblock %}
4

2 に答える 2

0

したがって、基本的に、@bdbd が述べたように、BookList クラスは次のようになります。

class BookList(ListView):
    model = Book
    def get_queryset(self):
        books = Book.objects.distinct('name')
        return books
于 2021-08-12T06:53:42.680 に答える