Я все еще новичок в Джанго, поэтому, пожалуйста, потерпите меня.Я пытаюсь сделать сайт о книгах.Теперь у меня появляется ошибка, подобная этой
MultipleObjectsReturned в / premium / 1 / get () вернул более одной книги - она вернула 2!
Не знаюне знаю, где искать ошибку.Вот мой пример кода.
class PageDetailView(LoginRequiredMixin, generic.View):
def get(self, request, *args, **kwargs):
book = get_object_or_404(Book)
page = get_object_or_404(Page)
user_membership = get_object_or_404(Customer, user=request.user)
user_membership_type = user_membership.membership.membership_type
user_allowed = book.allowedMembership.all()
context = {'object': None}
if user_allowed.filter(membership_type=user_membership_type).exists():
context = {'object': page}
return render(request, "catalog/page_detail.html", context)
Трассировка:
Файл "C: \ Users \ admin \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ core \ handlers \ exception.py "во внутреннем 34. response = get_response (запрос)
Файл" C: \ Users \ admin \ AppData \ Local \ Programs \ Python \ Python37-32 \ "lib \ site-packages \ django \ core \ handlers \ base.py "в _get_response 126. response = self.process_exception_by_middleware (e, запрос)
Файл" C: \ Users \ admin \ AppData \ Local \ Programs\ Python \ Python37-32 \ lib \ site-packages \ django \ core \ handlers \ base.py "в _get_response 124. response = wrapped_callback (запрос, * callback_args, ** callback_kwargs)
Файл" C:\ Users \ admin \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ views \ generic \ base.py "в представлении 68. вернуть self.dispatch (request, * args, ** kwargs))
Файл "C: \ Users \ admin \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ contrib \ auth \ mixins.py" в отправке 52. вернуть super() .dispatch (request, * args, ** kwargs)
Файл "C: \ Users \ admin \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ views \ generic \base.py "в отправке 88. обработчик возврата (запрос, * args, ** kwargs)
Файл" C: \ Users \ admin \ thesis \ blackink_website \ catalog \ views.py "в get 127. book= get_object_or_404 (книга)
Файл "C: \ Users \ admin \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ shortcuts.py" в get_object_or_404 93. вернуть набор запросов.get (* args, ** kwargs)
Файл "C: \ Users \ admin \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ models \ query.py "в get 403. (self.model._meta.object_name, num)
Тип исключения: MultipleObjectsReturned в / premium / 1 / Значение исключения: get () вернул более одной книги - вернул 2!
Я обновлю сообщение, если информации недостаточно.Заранее спасибо.
ОБНОВЛЕНИЕ
вот мои модели.py
class Book(models.Model):
title = models.CharField(max_length=200) #i deleted some info to make it shorter
allowedMembership = models.ManyToManyField(Membership, blank=True)
def get_absolute_url(self):
return reverse('book-detail', args=[str(self.id)])
def __str__(self):
return self.title
@property
def pages(self):
return self.page_set.all()
class Page(models.Model):
book = models.ForeignKey(Book, on_delete=models.CASCADE, null=True)
file = models.FileField(upload_to='book_content', validators=[pdf_file_extension], help_text="PDF File Only")
timestamp = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.book.title
def get_absolute_url(self):
return reverse('page-detail', args=[str(self.id)])
page_detail.html
{% if user_membership and user_membership.user == request.user %}
{% for content in book.pages %}
<a href="{{ content.get_absolute_url }}" class="site-btn">Read</a>
{% endfor %}
{% else %}
<button class="site-btn" disabled="disabled">VIP</button>
{% endif %}