Size: a a a

Django [ru] #STAY HOME

2020 January 17

ДШ

Дмитрий Шепелев in Django [ru] #STAY HOME
А что этот метод должен вернуть?
источник

ДШ

Дмитрий Шепелев in Django [ru] #STAY HOME
self.__class__()?
источник

DT

Dan Tyan in Django [ru] #STAY HOME
нет, сериализованые данные объекта
источник

PZ

Pavel Zagrebelin in Django [ru] #STAY HOME
Дмитрий Шепелев
Товарищи, а что вы используете для рекурсивного отображения сериализаторов?
есть либа что-то типа drf-recursive для рекурсивных полей, я использовал - норм
источник

DT

Dan Tyan in Django [ru] #STAY HOME
или поля
источник

ДШ

Дмитрий Шепелев in Django [ru] #STAY HOME
Pavel Zagrebelin
есть либа что-то типа drf-recursive для рекурсивных полей, я использовал - норм
источник

PZ

Pavel Zagrebelin in Django [ru] #STAY HOME
ага, оно, спасибо.
источник

SP

Sergey Python in Django [ru] #STAY HOME
привет
источник

SP

Sergey Python in Django [ru] #STAY HOME
у меня вопрос по миграциям
источник

DT

Dan Tyan in Django [ru] #STAY HOME
Sergey Python
привет
наконецто нам кто то расскажет про python
источник

RS

Rust Saiargaliev in Django [ru] #STAY HOME
@Sergey_Python попробуй одним сообщением этот вопрос описать. Код скидывай на пасту (всё в правилах описано, прочти)
источник

SP

Sergey Python in Django [ru] #STAY HOME
ок.
источник

Н

Никита in Django [ru] #STAY HOME
я вот так права делал

@user_permission
def has_service(user):
   return models.Q(service_env_id__in=user.services_ids)

class Serviceable(PermissionsForObjectMixin):
   serviceenv = models.ForeignKey('assets.ServiceEnvironment', related_name='+', blank=True, null=True)

   class Meta:
       abstract = True

   class Permissions:
       has_access = has_service
источник

SP

Sergey Python in Django [ru] #STAY HOME
Вопрос про порядок исполнения нескольких миграций.

Задача: Мне нужно добавить кастомное право в модель, и добавить это право в две группы,
так чтобы это можно было оформить коммитом и соотв. задеплоить. Хотел сделать это миграциями.

определяю свое право в Мета классе модели:
   ...
 class Meta:
       permissions = (
           ('can_chpok_user', 'может чпокать юзеров'),
       )    
 ...

генерю миграцию(допустим имя у нее будет migration_А):

# -*- coding: utf-8 -*-
# Generated by Django 1.9.3 on 2020-01-17 12:00
from future import unicode_literals

from django.db import migrations

class Migration(migrations.Migration):

   dependencies = [
       ('core', '0010_auto_20200116_0055'),
   ]

   operations = [
       migrations.AlterModelOptions(
           name='yesuser',
           options={'permissions': (('can_chpok_user', 'может чпокать юзеров'),)},
       ),
   ]
 
дальше пишу такую миграцию(допустим ее имя migration_B):

...
from django.contrib.auth.models import Group, Permission
from django.db import migrations
...

def add_chpok_perm(apps, schema_editor):

   can_chpok_user = Permission.objects.get(codename='can_chpok_user')
   lookup_groups = Group.objects.filter(name__in=('Оператор Чпока', 'МегаЧпокер'))  

   for g in lookup_groups:
       g.permissions.add(can_chpok_user)


class Migration(migrations.Migration):
   atomic = True
   dependencies = [
       ('core', 'migration_A'),
   ]

   operations = [
       migrations.RunPython(add_chpok_perm, reverse_code=migrations.RunPython.noop),
   ]

т.е. предполагая что сначала будет выполнена миграция А(потому что B зависит от А), в миграции B хочу найти уже созданную запись права и добавить ее в нужные группы.
Выполняется так: миграция А применяется, а вот в миграции B ошибка - не найдена соотв. запись Permission.
Пробовал это сделать с atomic=True, но результат такой же.
Пробовал в миграцию А добавить вторую операцию(по сути все то что есть в миграции B) - тот же эффект - запись в БД не создается.
Причем если выполнять только А, то все нормально. Право создается, все стандартно. Но мне нужно не только само право, но и назначение этого права нужным группам.
Юзеркейс то в этом и заключается...

=========================================================================================
В итоге пришлось писать совсем сыро - без class Metа,
а хотелось бы с ним - чтобы видеть в коде кастомные права модели,


...
from django.contrib.auth.models import Group, Permission
from django.db import migrations
...

def add_chpok_perm(apps, schema_editor):
   chpok_desc = {
       'content_type_id': 13,
       'codename': 'chpok',
       'name': 'может чпокать юзеров'
   }

   perm = Permission.objects.create(**chpok_desc)
   perm.save()

   lookup_groups = Group.objects.filter(name__in=('Оператор Чпока', 'МегаЧпокер'))
   can_chpok_user = Permission.objects.get(codename='can_chpok_user')

   for g in lookup_groups:
       g.permissions.add(can_chpok_user)


class Migration(migrations.Migration):
   atomic = True
   dependencies = [
       ('core', 'chpok_migration'),
   ]

   operations = [
       migrations.RunPython(add_chpok_perm, reverse_code=migrations.RunPython.noop),
   ]
источник

PZ

Pavel Zagrebelin in Django [ru] #STAY HOME
Sergey Python
Вопрос про порядок исполнения нескольких миграций.

Задача: Мне нужно добавить кастомное право в модель, и добавить это право в две группы,
так чтобы это можно было оформить коммитом и соотв. задеплоить. Хотел сделать это миграциями.

определяю свое право в Мета классе модели:
   ...
 class Meta:
       permissions = (
           ('can_chpok_user', 'может чпокать юзеров'),
       )    
 ...

генерю миграцию(допустим имя у нее будет migration_А):

# -*- coding: utf-8 -*-
# Generated by Django 1.9.3 on 2020-01-17 12:00
from future import unicode_literals

from django.db import migrations

class Migration(migrations.Migration):

   dependencies = [
       ('core', '0010_auto_20200116_0055'),
   ]

   operations = [
       migrations.AlterModelOptions(
           name='yesuser',
           options={'permissions': (('can_chpok_user', 'может чпокать юзеров'),)},
       ),
   ]
 
дальше пишу такую миграцию(допустим ее имя migration_B):

...
from django.contrib.auth.models import Group, Permission
from django.db import migrations
...

def add_chpok_perm(apps, schema_editor):

   can_chpok_user = Permission.objects.get(codename='can_chpok_user')
   lookup_groups = Group.objects.filter(name__in=('Оператор Чпока', 'МегаЧпокер'))  

   for g in lookup_groups:
       g.permissions.add(can_chpok_user)


class Migration(migrations.Migration):
   atomic = True
   dependencies = [
       ('core', 'migration_A'),
   ]

   operations = [
       migrations.RunPython(add_chpok_perm, reverse_code=migrations.RunPython.noop),
   ]

т.е. предполагая что сначала будет выполнена миграция А(потому что B зависит от А), в миграции B хочу найти уже созданную запись права и добавить ее в нужные группы.
Выполняется так: миграция А применяется, а вот в миграции B ошибка - не найдена соотв. запись Permission.
Пробовал это сделать с atomic=True, но результат такой же.
Пробовал в миграцию А добавить вторую операцию(по сути все то что есть в миграции B) - тот же эффект - запись в БД не создается.
Причем если выполнять только А, то все нормально. Право создается, все стандартно. Но мне нужно не только само право, но и назначение этого права нужным группам.
Юзеркейс то в этом и заключается...

=========================================================================================
В итоге пришлось писать совсем сыро - без class Metа,
а хотелось бы с ним - чтобы видеть в коде кастомные права модели,


...
from django.contrib.auth.models import Group, Permission
from django.db import migrations
...

def add_chpok_perm(apps, schema_editor):
   chpok_desc = {
       'content_type_id': 13,
       'codename': 'chpok',
       'name': 'может чпокать юзеров'
   }

   perm = Permission.objects.create(**chpok_desc)
   perm.save()

   lookup_groups = Group.objects.filter(name__in=('Оператор Чпока', 'МегаЧпокер'))
   can_chpok_user = Permission.objects.get(codename='can_chpok_user')

   for g in lookup_groups:
       g.permissions.add(can_chpok_user)


class Migration(migrations.Migration):
   atomic = True
   dependencies = [
       ('core', 'chpok_migration'),
   ]

   operations = [
       migrations.RunPython(add_chpok_perm, reverse_code=migrations.RunPython.noop),
   ]
в док-ции на миграции сказано, что не стоит импортировать модели напрямую, там какая-то своя мантра для получения моделей в RunPython-функциях используется.
Я не исследовал этот вопрос, но может быть тебе поможет?
источник

SP

Sergey Python in Django [ru] #STAY HOME
да, там есть хрень про apps.models, но это не решает
источник

V

Vlad in Django [ru] #STAY HOME
кто с PyAPNs2 сталкивался ?
источник

AK

Anvar Khamidov in Django [ru] #STAY HOME
Ребят, как в базе данных мне брать значения по ключу из другого объекта, к примеру, нужнл в некую модель добавить описание, а это описание нужнл взять из зависимой модели
источник

SP

Sergey Python in Django [ru] #STAY HOME
читал когда то что миграции применяются "скопом", т.е. сначала формируется sql скрипт который будет применяться -  от всех миграций к-е нужно выполнить, и соотв. дальше уже будет неизвестный порядок транзакций.
источник

PZ

Pavel Zagrebelin in Django [ru] #STAY HOME
Anvar Khamidov
Ребят, как в базе данных мне брать значения по ключу из другого объекта, к примеру, нужнл в некую модель добавить описание, а это описание нужнл взять из зависимой модели
F-объект тебе нужен, скорее всего.
источник