Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 16, 2015 16:46:49

hound
Зарегистрирован: 2014-10-27
Сообщения: 41
Репутация: +  0  -
Профиль   Отправить e-mail  

Иерархия пользователей

Добрый день, есть модель пользователя, кроме логина, имени и пароля в этой модели есть поле “владельца”.

    name = models.CharField(max_length = 100)
    owner = models.ForeignKey('self')

Есть вторая модель, которая привязана к модели пользователя:
class Data(models.Model):
    owner = models.ForeignKey(MyUser)
    title = models.CharField()

Соответственно, есть главная учетная запись администратора, у которой в поле owner ссылается на себя. И дальше идут другие пользователи и к каждому пользователю привязано произвольное кол-во экземпляров модели Data.

Какой существует оптимальный способ вывезти все доступные экземпляры модели Data для определенного пользователя?
У одного пользователя может быть “в подчинении” несколько пользователей, у которых так же могут быть свои пользователи.

Офлайн

#2 Апрель 16, 2015 17:38:03

inoks
От: Russia
Зарегистрирован: 2012-12-11
Сообщения: 343
Репутация: +  35  -
Профиль   Адрес электронной почты  

Иерархия пользователей

Уровней может быть произвольное количество?

Что то подобное нужно использовать в рекурсии:

for slave in owner.myuser_set.all:
    for data_item in slave.data_set.all:
        print data_item

Офлайн

#3 Апрель 16, 2015 17:39:52

hound
Зарегистрирован: 2014-10-27
Сообщения: 41
Репутация: +  0  -
Профиль   Отправить e-mail  

Иерархия пользователей

inoks
уровней произвольное кол-во.
И общая структура получается древовидной.

Офлайн

#4 Апрель 16, 2015 18:58:51

inoks
От: Russia
Зарегистрирован: 2012-12-11
Сообщения: 343
Репутация: +  35  -
Профиль   Адрес электронной почты  

Иерархия пользователей

как то так (не проверял).

data_set = []
def collect_data(owner):
	for user in owner.myuser_set.all():
		collect_data(user)
	for item in owner.data_set.all():
		if item not in data_set:
			data_set.append(item)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version