Ответы пользователя по тегу Django
  • Как передать переменную из шаблона Django в JS?

    @serhiops
    Python/JavaScript/C++
    Ответ написан
    Комментировать
  • Как организовать вычисления в связанных таблицах в джанго?

    @serhiops
    Python/JavaScript/C++
    Не совсем понятна суть вопроса, но возможно, вы имеете ввиду это https://docs.djangoproject.com/en/4.1/topics/db/ag...
    Ответ написан
    Комментировать
  • Как отправить на фронтенд url картинки заглушки, если поле ImageField пустое?

    @serhiops
    Python/JavaScript/C++
    Попробуйте что-то такое, настройте под себя
    class CustomUserModelSerializer(serializers.ModelSerializer):
        """give all users"""
        status = serializers.SerializerMethodField()
        class Meta:
            model= CustomUser
            fields = ('id','email','name','status', 'avatar')
    
        def get_status(self, obj):
            if obj.is_active == True:
                status = 'active'
            else:
                status = 'inactive'
            return status
     def to_representation(self, instance):
            response = super().to_representation(instance)
            response['avatar'] = instance.user.avatar if not None else "Путь к фото"
            return response
    Ответ написан
  • Метод который выведет по одному объекту с БД?

    @serhiops
    Python/JavaScript/C++
    Message.objects.all().values('author').distinct()
    Ответ написан
  • Как сделать редирект пользователя при помощи DRF?

    @serhiops Автор вопроса
    Python/JavaScript/C++
    Я напутал с самой формой в html. Спасибо за ответы.
    Ответ написан
    Комментировать
  • Как мне правильно интегрировать react js в django без растравления приоритетов между компонентами?

    @serhiops
    Python/JavaScript/C++
    Просто скрываешь элемент при помощи hidden при определенном условии:
    <div id="app" {% if something %}  hidden {% endif %}></div>
    <div id="product"></div>
    <div id="saller"></div>
    Ответ написан
  • Можно ли вывести форму в цикле?

    @serhiops
    Python/JavaScript/C++
    Циклом выводить ничего не нужно. Есть такое понятие как Наборы форм.
    Для создания наборов форм, связанных с моделями, применяется быстрое объявление посредством фабрики классов - функции modelformset_factory из модуля django.forms.
    Более детально в русскоязычной документации
    Ответ написан
  • Как вывести связные модели в шаблон?

    @serhiops
    Python/JavaScript/C++
    1. То, что вы показали не является раширенной моделью пользователя. Вы создали отдельную модель и просто связали ее по первичному ключу с моделью User. Вот так выглядит разширенная модель пользователя:
    models.py
    from django.contrib.auth.models import AbstractUser
    class CustomUser(AbstractUser):
        code = models.IntegerField(verbose_name="Код", blank=True, null=True)
        is_salesman = models.BooleanField(default = False, verbose_name="Продавец")
        age = models.IntegerField(verbose_name="Возраст", blank=True, null=True)
        number_of_phone =  models.CharField(max_length=13,verbose_name="Номер телефона", blank=True, null=True)
        city = models.CharField(max_length=64, verbose_name="Населенный пункт", blank=True, null=True)
        company = models.CharField(max_length=64, verbose_name="Компания", default="company name", blank=True, null=True)

    settings.py
    AUTH_USER_MODEL = 'your_app_name.CustomUser'
    В так случае вы сможете обращаться к полям модели напрямую в шаблоне(как и обычно)
    {{ user.number_of_phone }}
    2. Если исходить от того, что вы имеете, то как выход я вижу передавание текущего профиля пользователя в шаблон через контект в вашем views.py:
    ...
    profile = Profile.objects.get(user = request.user)
    ...
    Ответ написан
  • Как принять body из POST запроса и вернуть данные на front?

    @serhiops
    Python/JavaScript/C++
    Достаточно странное прописание api...
    class SizeDiskSet(viewsets.ReadOnlyModelViewSet):
    
        queryset = SizeDisk.objects.all()
        serializer_class = SizeDiskSerializer
        permission_classes = [permissions.AllowAny]
    
        def get_serializer_class(self):
            return SizeDiskSerializer

    1.Вы прописали явно класс сериалайзера в атрибутах класса, зачем вы пишете функцию get_serializer_class?
    2. Вы прописуете модификатор доступа permissions.AllowAny, но это поведение по-умолчанию, явно его указывать не нужно(если вы ,конечно, не изменяли значение по умолчанию в settings.py)
    3.Вас не смущает, что вы используете viewsets.ReadOnlyModelViewSet для добавления в базу данных? Разве название не говорит само за себя?

    serializers.py:
    from rest_framework import serializers
    from .models import YourModel
    
    class YourModelSerializer(serializers.ModelSerializer):
        class Meta:
            model = YourModel
            fields = "__all__"  #Выберет все поля, но рекомендуется указываять явно при помощи списка или кортежа:['field1', 'field2']

    api.py:
    from rest_framework.viewsets import ModelViewSet
    from .serializers import YourModelSerializer
    from .models import YourModel
    
    class YourModelViewset(ModelViewSet):
        queryset = YourModel.objects.all()
        serializer_class = YourModelSerializer

    urls.py
    from django.urls import path, include
    from . import api
    from rest_framework import routers
    
    router = routers.SimpleRouter()
    router.register(r'model-list', api.YourModelViewset)
    
    urlpatterns = [
        ...
       path('api/v1', include(router.urls)),
    ]

    Теперь список всех записей будет доступен по ссылке api/v1/model-list/
    По этой же ссылке вы можете делать POST И GET запросы.
    По адресу api/v1/model-list/pk/ Вы получите 1 запись по первичному ключу
    По этой ссылке вы сможете делать GET, PUT, PATCH и DELETE запросы (мб еще какие-то но я другие не использовал).
    После того, как вы все это проделаете можно будет приступить к выполнению задачи. Первое что пришло мне на ум - переопределить метод create, Метод прописан в миксине CreateModelMixin и состоит в классе ModelViewSet:

    from rest_framework.response import Response
    
    class YourModelViewset(ModelViewset):
       #то, что мы рантше писали
       def create(self, request, *args, **kwargs):
            serializer =  YourModelSerializer(data = request.data)
            serializer.is_valid(raise_exception = True)
            serializer.save()
            return Response({"data":serializer.data})

    После этого вам вернутся только что сохраненные данные
    Ответ написан
    Комментировать
  • Почему не работает кнопка?

    @serhiops
    Python/JavaScript/C++
    1. Как помне, способ, которым вы решили это реализовать довольно странный. На практике чаще всего в похожих случаях использут DRF.
    2. Суда по url, который у вас формулируется, можно сказать, что неполадку стоит искать с ключом csrf. Попробуйте добавить такую js-функцию и немного изменить ваш ajax post запрос.
    Функция:
    const getCookie = name => {
        let cookieValue = null;
        if (document.cookie && document.cookie !== '') {
            let cookies = document.cookie.split(';');
            for (let i = 0; i < cookies.length; i++) {
                let cookie = cookies[i].trim();
                if (cookie.substring(0, name.length + 1) === (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }

    ajax post-запрос:
    $.ajax({
            url: URL,
            type: 'POST',
            data: {
               ваши данные
                csrfmiddlewaretoken: getCookie('csrftoken'),  //это мы берем csrf-токен
            },
           /* Остальные параметры */
            success: function (response) { },
            error: function (rs, e) {
                console.log(rs.responseText);
            }
        });
    Ответ написан
    Комментировать
  • Как решить ошибку (admin.E035) The value of 'readonly_fields[0]' is not a callable?

    @serhiops
    Python/JavaScript/C++
    Все очень просто: в admin.py вы обращаетесь к полю "get_photo":
    fields = ('title', 'category', 'content', 'photo', 'get_photo', 'is_published', 'views',
                  'create_at', 'updated_at')
        readonly_fields = ('get_photo', 'views', 'create_at', 'updated_at')

    Такого поля в модели News не существует, но есть photo, Полагаю, что если вы замените все "get_photo" на "photo", то ошибка исчезнет
    Ответ написан
    Комментировать
  • Как посчитать количество объектов и вывести его в HTML?

    @serhiops
    Python/JavaScript/C++
    count = Coment.objects.filter(user = some_user).count()

    Так же если вы берете коментарии через текущего пользователя, то можно использовать агрегатные вычесления:
    from django.db.models import Count
    coments = User.objects.get(pk = some_pk).get_coments.agregate(cnt = Count("coment"))
    count_coments = coments["cnt "]

    В данном урывке get_coments - значение атрибета related_name в вашей модели. Если вы его не указали явно, то он будет иметь следующий вид : <имя таблицы>_set
    Немного больше о related_name
    Ответ написан
    6 комментариев
  • Как вывести фотографию с формы Django?

    @serhiops
    Python/JavaScript/C++
    1) Тяжело сказать в чем проблема, пока вы полностью не покажите ваш контроллер-функцию.
    2) Предпочтительно использовать контроллеры-класы. В данном случае вам подойдет класс FormView из пакета django.views.generic.edit
    или
    django.views.generic
    3) Из того, что вы предоставили можно сказать лишь то, что в html вы неправильно указали src, правильный вариант :
    <img class="photo_img" src="{{ href_photo.url }}" alt="">
    Ответ написан