
Spacehug
21.08.2017
09:06:06
Когда я говорю фильтрануть - мне нужно в list_filter при регистрации в админке передать, собственно, кастомный фильтр
Как фильтрануть по другим параметрам типа is_dead - я научился

Dan
21.08.2017
09:07:05
у сабоководов есть связь к собакам правильно ?

Spacehug
21.08.2017
09:07:12
да, форейн кей

Google

Dan
21.08.2017
09:07:21
ты в модели сабоководов
pet__datefield
pet - поле ForeignKey
datefield - поле по которому фильтруешь
два подчеркивания между ними

Spacehug
21.08.2017
09:09:48
%)
Окей, объясню на боевом примере
Есть модель Юзер, у Юзера есть комменты, лайки и "разговоры" (к которым есть комменты).
Имеется вот такая каша:

Dan
21.08.2017
09:10:54
не скромничай скидывай сразу код
модели и админки


Spacehug
21.08.2017
09:12:39
@admin.register(UserStats)
class StatisticsAdmin(UserAdmin):
list_filter = (DCLFilter, ('date_joined', DateRangeFilter),)
list_display_links = 'id', 'email', 'first_name', 'last_name'
search_fields = 'email', 'first_name', 'last_name', 'id'
ordering = 'first_name', 'last_name', 'email'
empty_value_display = '------'
form = UserAdminForm
class Meta:
model = User
def get_queryset(self, request):
self.request = request
queryset = super(StatisticsAdmin, self).get_queryset(request)
return queryset
def get_discussions_amount(self, obj):
try:
_filter = DCLFilter(self.request, dict(self.request.GET), self.Meta.model, self.Meta.model)
return _filter.queryset(self.request, Discussion.objects.filter(author=obj.id)).count()
except Exception as e:
logger.error("GRAND EXCEPTION", e)
Фильтр, который уже есть:
class DCLFilter(SimpleListFilter):
""" Discussion, Comment, Like фильтр по полю is_delete"""
title = "Разговоры и комментарии по удалённости"
parameter_name = 'deleted_content'
def lookups(self, request, model_admin):
return (("no", "Не удалённые"),
("yes", "Удалённые"))
def queryset(self, request, queryset):
if self.value() in ("yes", ["yes"]) and queryset.model.__name__ in ('Discussion', 'Comment'):
return queryset.filter(is_delete=True)
elif self.value() in ("no", ["no"]) and queryset.model.__name__ in ('Discussion', 'Comment'):
return queryset.filter(is_delete=False)
Я не могу раздуплиться как прикрутить второй фильтр, он при явном указании model_admin и filter_path говорит, что их нет :)

Google

Spacehug
21.08.2017
09:15:09
Модель не покажу - там из нужного только поле is_delete и date_created

Dan
21.08.2017
09:15:45
поле по которому связь ?

Сергей
21.08.2017
09:16:15
@admin.register(UserStats)
class StatisticsAdmin(UserAdmin):
list_filter = (DCLFilter, ('date_joined', DateRangeFilter),)
list_display_links = 'id', 'email', 'first_name', 'last_name'
search_fields = 'email', 'first_name', 'last_name', 'id'
ordering = 'first_name', 'last_name', 'email'
empty_value_display = '------'
form = UserAdminForm
class Meta:
model = User
def get_queryset(self, request):
self.request = request
queryset = super(StatisticsAdmin, self).get_queryset(request)
return queryset
def get_discussions_amount(self, obj):
try:
_filter = DCLFilter(self.request, dict(self.request.GET), self.Meta.model, self.Meta.model)
return _filter.queryset(self.request, Discussion.objects.filter(author=obj.id)).count()
except Exception as e:
logger.error("GRAND EXCEPTION", e)
https://pastebin.com/

Spacehug
21.08.2017
09:16:47

Dan
21.08.2017
09:17:27
тебе надо фильтровать по полю date_created в модели user?

Spacehug
21.08.2017
09:18:02
Мне надо фильтровать _зависимые модели_ по полю date_created в модели user
Как юзеров по дате фильтрануть, я знаю )

Dan
21.08.2017
09:18:40
ну так поле по которому зависимая модель связывается скажи

Spacehug
21.08.2017
09:19:23

Dan
21.08.2017
09:19:35
аааа
теперь смотри допустим модель модель коментов

Dmitriy
21.08.2017
09:21:23
хм, это же простое ModelName.objects.filter(user__date_created=X), нет?

Dan
21.08.2017
09:21:36
user = models.ForeignKey(User, related_name='user_commnets')
в фильтре указываешь 'user_comments__date_created'

Spacehug
21.08.2017
09:22:21
А так я только юзеров отфильтрую по полю модели User

Dmitriy
21.08.2017
09:24:56


Spacehug
21.08.2017
09:24:57
в фильтре указываешь 'user_comments__date_created'
Тут нюанс есть, просто так фильтр ебануть - не проблема. Мне нужно сделать именно в list_filter - это нужно писать кастомный фильтр, и потом
_filter = DCLFilter(self.request, dict(self.request.GET), self.Meta.model, self.Meta.model)
return _filter.queryset(self.request, Discussion.objects.filter(author=obj.id)).count()
# Например. Тут - фильтр по разговорам конкретного юзера.
в приведенном мной коде не юзеры фильтруются, а (например) комменты
Так, окей. Попробую ещё раз объяснить.
Я пишу страницу статистики, где вываливается список пользователей (модель User). Её и регистрирую.
У каждого пользователя есть куча комментов, лайков и разговоров - все они ссылаются на User по ForeignKey.
Мне нужна панелька справа в админке, чтобы при тычке на неё происходили следующие вещи:
- Фильтровались удалённые, не удалённые комменты-разговоры-лайки (это уже есть)
- Из этого фильтровались комменты-разговоры-лайки по дате (вот в этом загвоздка).
- В итоге в каждой строке у каждого юзера показывалось количество нафильтровавшегося


Dmitriy
21.08.2017
09:28:48
т.е. ты хочешь сделать reverse relation filter по полю

Google

Spacehug
21.08.2017
09:28:53
Исходя из "панелька справа в админке" можно сделать вывод, что это list_filters
Исходя из того, что это list_filters - мне нужен кастомный. Изначальный вопрос был именно в этом: как пишутся кастомные фильтры DateRangeFilter, если в их кверисет прилетают разные модели (фильтр при этом одинаковый - по дате создания)

amureki
21.08.2017
09:33:37

Massimo
21.08.2017
09:50:07
Вопрос, если я хочу на сервере использовать pg бд а у меня на компе sqlite то я могу скинуть файлы, без БД, а потом запустить pg БД?

sic transit
21.08.2017
09:50:44
Лучше не надо, используй идентичное. Это то, где уже Docker рулит.

Bob
21.08.2017
09:54:26

Massimo
21.08.2017
09:54:50

Bob
21.08.2017
09:55:37

sic transit
21.08.2017
09:56:00

Massimo
21.08.2017
09:56:19
А как менять директорию в unix? в винде это cd directory/

Bob
21.08.2017
09:56:46
Ну так.
чем больше натворишь, чем больше шишек, тем больше опыта ?

Denis
21.08.2017
09:56:59

Massimo
21.08.2017
09:57:34
Спасибо)

Artem
21.08.2017
10:01:12

Massimo
21.08.2017
10:01:34
Да, оно )
-bash: ./manage.py: Permission denied
Хотя зашел с root

Eugene
21.08.2017
10:11:27
python manage.py

Artem
21.08.2017
10:22:01

Massimo
21.08.2017
10:22:21

Google

Bob
21.08.2017
11:20:19
Windows - все этим сказано

Григорий
21.08.2017
11:24:27
Может пора начать использовать средства виртуализации? что бы перестать вот этой хренью страдать на винде
А еще вопрос, что вас заствляет сидеть на винде?

Nikita
21.08.2017
11:25:43
эксельчик)

Григорий
21.08.2017
11:27:00
ну так есть же гугл документы, опен офис

Admin
ERROR: S client not available

sic transit
21.08.2017
11:27:18
Учим все задом-надом: Фреймворк->Программирование->Технологии->Английский.
Извращение какое то, имхо.

Клим
21.08.2017
11:44:18
Ворд оф танкс ) для проганья поднят сервер на Raspberry )
А еще вопрос, что вас заствляет сидеть на винде?

Massimo
21.08.2017
11:46:56
Я еще прогю в вба
Гугл доки имеют свои скрипты которые я изучать не хочу. Компания сидит тоже на экселе
У нас тут консерватизм и архаичность

Alexander
21.08.2017
11:48:07
VirtualBox + Ubuntu ?

Massimo
21.08.2017
11:48:14
а то что python3 это не вина винды. Я сижу через putty и ему плевать на винду
У меня на сервере изначально зачем то стоит два питона

Григорий
21.08.2017
11:50:21
Я как бы не зря написал про средства виртуализации, у вас какой то зоопарк твориться, в котором без бутылки не разобрать, вы вместо того что бы писпть код, тратите уйму времени на то что бы все это полетело
попробуйте вагрант, что бы у вас локальная разработка была максимально идентична к продакшену

Massimo
21.08.2017
11:51:58
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN
Вот почему он мне показывает это если я его в .conf поменял на мой айпи?
python3 manage.py migrate
django.db.utils.OperationalError: could not connect to server: Connection refused
Is the server running on host "*.*.*.*" and accepting
TCP/IP connections on port 5432?
Может ли быть такое что сервак не дает TCP/IP подключение?

Google

Erzh
21.08.2017
11:53:26

Massimo
21.08.2017
11:53:42

Erzh
21.08.2017
11:54:11
А что такое "*.*.*.*" ?
А понял

Рустам
21.08.2017
12:47:41
Ребят, почему джанга может не генерить права в админке для моей модели?

Denis
21.08.2017
12:49:53
В contenttypes модель есть?

Massimo
21.08.2017
12:56:28
Можно ли синхронизировать проект в PyCharm с файлами на сервере?

b0g3r
21.08.2017
12:56:45
можно
односторонне
deployment вкладка в настройках

Massimo
21.08.2017
12:57:45
Оп. Отлично. А для первого проекта норм будет если я в sqlite проект оставлю, а то как небыло так и нет доступа у pg к протоколам?

b0g3r
21.08.2017
12:58:06
зависит, очевидно, от размера проекта
ну и база не должна быть общей в дев и на сервере

Massimo
21.08.2017
12:59:10
почему?

b0g3r
21.08.2017
12:59:34
потому что
1) синхронизация односторонняя
2) потому что не должна быть :)

Massimo
21.08.2017
12:59:55
ааааааааааааа