MU
Maciej Urmański11 декабря 2019 г. 6:27

Count user objects e.g posts

python, Django

Hi, I try to get numbers of user post.

I have model Embed and try to count how many user add this embeds.

My model:

class Embed(models.Model):
    url = models.URLField(max_length=255)
    title = models.CharField(max_length=255, verbose_name='Tytuł')
    description = HTMLField(verbose_name='Opis', blank=True, null=True)
    type = models.CharField(blank=True, max_length=200)
    thumbnail_url = models.URLField(max_length=255, blank=True, null=True)
    image = models.ImageField(upload_to='recipes', blank=True)
    html = models.TextField()
    votes = GenericRelation(LikeDislike, related_query_name='embedlikes')
    added_by = models.ForeignKey(User, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    category = TreeManyToManyField(RecipeCategory, blank=True, null=True, related_name='embeds', verbose_name='Kategoria')
    slug = AutoSlugField(populate_from='title', unique=True)

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

7
Evgenii Legotckoi
  • 11 декабря 2019 г. 6:52

Hello,

Try this

from django.db.models import Count
embeds = Embed.objects.annotate(total=Count('added_by'))
embeds[0].total
    MU
    • 11 декабря 2019 г. 7:52
    • (ред.)

    Hmm this count every recipes. Not only one user.

    I try something like that from stackoverflow:

    def recipedetail(request, slug):
        recipe = get_object_or_404(Embed, slug=slug)
        num_embed = recipe.objects.filter(added_by=added_by).count()
        return render(request, 'recipes/detail.html', {'recipe': recipe,
                                                        'num_embed': num_embed}
    

    But then error appear:

    Manager isn't accessible via Embed instances

    I have this from there: https://stackoverflow.com/questions/50393455/count-the-number-of-posts-by-a-user-django

      Evgenii Legotckoi
      • 11 декабря 2019 г. 8:07
      • (ред.)

      May be, because, you don`t have field "author" in your model... ?

      And in this code you get object of model

      recipe = get_object_or_404(Embed, slug=slug)
      

      Therefore you cannot use objects in this row

      num_embed = recipe.objects.filter(author=author).count()
      

      Because of objects can be used only in this situation

      Embed.objects.all() # only for model class, not for instance
      

      And I don`t see author instance in your code.

      You can write something else like this

      def recipedetail(request, slug):
          recipe = get_object_or_404(Embed, slug=slug)
          # missed author instance, need to add code for getting author instance
          num_embed = Embed.objects.filter(added_by=author).count()
          return render(request, 'recipes/detail.html', {'recipe': recipe,
                                                          'num_embed': num_embed}
      

      But you should get author instance from anywhere, for example request.user

        MU
        • 11 декабря 2019 г. 8:08

        Yeah I edit my answer and change to added_by. But still this don't work.

          Evgenii Legotckoi
          • 11 декабря 2019 г. 8:11
          • (ред.)

          added_by must be some author instance, some object. You should get this object from anywhere. In your code you don`t make any actions for getting author instance.

          Ok, try this

          def recipedetail(request, slug):
              recipe = get_object_or_404(Embed, slug=slug)
              num_embed = recipe.objects.filter(added_by=request.user).count()
              return render(request, 'recipes/detail.html', {'recipe': recipe,
                                                              'num_embed': num_embed}
          
            Evgenii Legotckoi
            • 11 декабря 2019 г. 8:14

            or this

            def recipedetail(request, slug):
                recipe = get_object_or_404(Embed, slug=slug)
                num_embed = recipe.objects.filter(added_by=recipe.added_by).count()
                return render(request, 'recipes/detail.html', {'recipe': recipe,
                                                                'num_embed': num_embed}
            
              MU
              • 11 декабря 2019 г. 8:27
              • Ответ был помечен как решение.

              Thank you! Now works, and this is solution.

              num_embed = Embed.objects.filter(added_by=recipe.added_by).count()
              

                Комментарии

                Только авторизованные пользователи могут публиковать комментарии.
                Пожалуйста, авторизуйтесь или зарегистрируйтесь
                B

                C++ - Тест 002. Константы

                • Результат:16баллов,
                • Очки рейтинга-10
                B

                C++ - Тест 001. Первая программа и типы данных

                • Результат:46баллов,
                • Очки рейтинга-6
                FL

                C++ - Тест 006. Перечисления

                • Результат:80баллов,
                • Очки рейтинга4
                Последние комментарии
                k
                kmssr9 февраля 2024 г. 5:43
                Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                АК
                Анатолий Кононенко5 февраля 2024 г. 12:50
                Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                EVA
                EVA25 декабря 2023 г. 21:30
                Boost - статическая линковка в CMake проекте под Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
                J
                JonnyJo25 декабря 2023 г. 19:38
                Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
                G
                Gvozdik19 декабря 2023 г. 8:01
                Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
                Сейчас обсуждают на форуме
                P
                Pisych27 февраля 2023 г. 15:04
                Как получить в массив значения из связанной модели? Спасибо, разобрался:))
                AC
                Alexandru Codreanu19 января 2024 г. 22:57
                QML Обнулить значения SpinBox Доброго времени суток, не могу разобраться с обнулением значение SpinBox находящего в делегате. import QtQuickimport QtQuick.ControlsWindow { width: 640 height: 480 visible: tr…
                BlinCT
                BlinCT27 декабря 2023 г. 19:57
                Растягивать Image на парент по высоте Ну и само собою дял включения scrollbar надо чтобы был Flickable. Так что выходит как то так Flickable{ id: root anchors.fill: parent clip: true property url linkFile p…
                Дмитрий
                Дмитрий10 января 2024 г. 15:18
                Qt Creator загружает всю оперативную память Проблема решена. Удалось разобраться с помощью утилиты strace. Запустил ее: strace ./qtcreator Начал выводиться весь лог работы креатора. В один момент он начал считывать фай…
                Evgenii Legotckoi
                Evgenii Legotckoi12 декабря 2023 г. 17:48
                Побуквенное сравнение двух строк Добрый день. Там случайно не высылается этот сигнал textChanged ещё и при форматировани текста? Если решиать в лоб, то можно просто отключать сигнал/слотовое соединение внутри слота и …

                Следите за нами в социальных сетях