• При сохранении в админке записывать id юзера?

    @javedimka
    Хочу сока
    В общем дошел до дома, подробнее напишу. Если у тебя определено поле для юзера в модели, то ты его можешь вообще вручную выбрать, а если лень это делать то можно так.
    Допустим у тебя есть приложение для публикации статей "articles", в articles/models.py есть модель статьи, в которой есть поле с пользователем который ее добавил, можно добавить еще одно поле для пользователя который ее последний раз редактировал, а можно и не добавлять если нужен только пользователь добавивший статью:
    # остальные импорты опущены 
    from django.conf import settings
    
    
    class Article(models.Model):
        ...
        added_by = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True,
                                     related_name="articles_added")
        last_edited_by = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True,
                                           related_name="articles_edited")
        ...

    Так как два поля ссылаются на одну модель, нужно определить для них related_name чтобы потом с помощью него можно было работать с ORM, типо чтобы получить все статьи добавленные пользователем:
    *объект_нужного_пользователя*.articles_added.all()

    Потом в файле articles/admin.py определяешь новую модель для "администратирования" этого объекта:

    from django.contrib import admin 
    from .models import Article
    
    
    class ArticleAdmin(admin.ModelAdmin):
        readonly_fields = ("last_edited_by",) # делаем полем рид онли, чтобы нельзя было его отредактировать
    
        def save_model(self, request, obj, form, change):
            if change: # True если изменяется уже существующий объект, False если добавляется новый
                # определяем и записываем пользователя если изменяется существующий объект
                obj.last_edited_by = request.user 
            else:
                # определяем и записываем пользователя если добавляется новый объект
                obj.added_by = request.user 
            super(ArticleAdmin, self).save_model(request, obj, form, change)
    
    
    admin.site.register(Article, ArticleAdmin)

    Все, пробуй. Если не нужен юзер редактировавший статью, то, надеюсь, разберешься что удалить надо?

    Подробнее о save_model():
    https://docs.djangoproject.com/en/1.10/ref/contrib...
    Подробнее о request:
    https://docs.djangoproject.com/en/1.10/ref/request...
    Ответ написан
    1 комментарий
  • Что сравнивается при сравнении массива с числом?

    @javedimka
    Хочу сока
    В питоне это называется списком, лучше уточнять.

    А ответом на твой вопрос является версия Python, когда ты в Python 2 сравниваешь два не одинаковых типа данных, то они сравниваются лексикографически(так это называется?), когда два названия типа сравниваются по алфавиту, т.е. тип списка это "list", тип целого числа это "int", сравнивается первая буква каждого слова, в английском алфавите буква L идет после i, т.е. порядковый номер буквы L(12) в алфавите больше, чем порядковый номер i(9), поэтому получается, что list > int (12>9), поэтому в Python 2 список больше числа с типом int (или float, decimal, по аналогии, но при этом числовые типы int, float, decimal можно успешно сравнивать между собой.)

    В Python 3 получишь ошибку:
    >>> x = [2, 3, 4, 6]
    >>> x > 1
    Traceback (most recent call last):
      File "<pyshell#2>", line 1, in <module>
        x > 1
    TypeError: unorderable types: list() > int()
    Ответ написан
    Комментировать
  • Что значит такой синтаксис многострочного комментария в python?

    @javedimka
    Хочу сока
    Это значит, что он написан для Sphinx(или для Docutils, например) - генератора HTML(и не только) документации, сам синтаксис - reStructuredText
    Более подробно:
    docs.python-guide.org/en/latest/writing/documentation
    Конкретные примеры синтаксиса и то как они будут обработаны генератором:
    docutils.sourceforge.net/docs/user/rst/quickref.html
    Ответ написан
    Комментировать
  • Проблемы с кодировкой. Как решить?

    @javedimka
    Хочу сока
    from urllib.parse import quote
    from urllib import request
    
    
    def get_html(url):
        response = request.urlopen(url)
        return response.read()
    
    yandex_ru = "https://geocode-maps.yandex.ru/1.x/?format=json&geocode={0}"
    
    get_html(yandex_ru.format(quote("Москва, Сретенка 8"))).decode("utf-8")


    Все лавры werevolff - Кириллица в url Python 3, как преобразовать в url?

    https://docs.python.org/3/library/urllib.parse.htm...
    Ответ написан
    Комментировать