У меня это в представлениях:

def watchlist(request):
    watchlist_list = User.watchlist
    context = {
        "watchlist_list": watchlist_list
    }

И это в моделях:

from django.contrib.auth.models import AbstractUser
from django.db import models

class all_auctions(models.Model):
    title = models.CharField(max_length= 14)
    description = models.TextField(blank=False)
    photo_url = models.CharField(max_length= 500)
class User(AbstractUser):
    watchlist = models.ManyToManyField(all_auctions, blank = True, related_name = "watchlist")
class bids(models.Model):
    bid = models.DecimalField(decimal_places = 2, max_digits = 100000)
class comments(models.Model):
    comment = models.TextField(blank=False)

И пытаюсь сделать это в моем watchlist.html (просмотрите все аукционы, которые есть у some1 в их списке наблюдения):

{% extends "auctions/layout.html" %}

{% block body %}
    <h2>Watchlisted Listings</h2>

    {% for watchlisted in watchlist_list %}
        <div>
        <div style = "width: 1400px; border: 1px solid grey;padding: 10px; margin: 10px; display:inline-block;" class = auction_class>
                <img src="{{watchlisted.photo_url}}" alt="no image">
                <div style = "display:inline-block;">
                    <h2>{{watchlisted.title}}</h2>
                    {{watchlisted.description}}
                </div>
            </div>
        </div>
    {% endfor %}
{% endblock %}

И, как следует из заголовка, получить ошибку: объект «ManyToManyDescriptor» не повторяется. Если я не могу сделать это так, не будь злым и просто скажи, что я не могу (потому что мне надоели эти люди), но скажи, как еще это сделать. И да, я провел исследование.

2
Tryjis 8 Мар 2021 в 14:22

1 ответ

Лучший ответ

.watch_list - это менеджер , а не QuerySet, и, следовательно, не повторяется, вы конвертируете его в QuerySet с помощью .all() [Django-doc], вам также следует работать с request.user, а не с User, поскольку User - это класс, а не пользователь:

def watchlist(request):
    watchlist_list = request.user.watchlist.all()
    context = {
        'watchlist_list': watchlist_list
    }
    # …

Примечание . Обычно лучше использовать settings.AUTH_USER_MODEL [Django-doc] для ссылки на модель пользователя, чем для использования User модель [Django-doc] напрямую. Для получения дополнительной информации вы можете увидеть ссылка на раздел User модель документации.

0
Willem Van Onsem 8 Мар 2021 в 11:25