Доступ суперпользователя по стране - PullRequest
3 голосов
/ 20 августа 2010

Я хочу предоставить суперпользователю доступ к объектам, принадлежащим определенной стране.

например.Шведский SU может управлять только шведскими сущностями и т. Д. *

Однако я новичок в django (перенял старую систему) и мне нужен спасательный круг.

Я бы хотелбыть в состоянии указать таблицу отношений.

Я уже добавил профиль пользователя, и с этим у меня есть новое поле с именем super_user_country_link = models.ForeignKey (SuperUserToCountry, blank = True, null = True)

и затем под новым классом

class SuperUserToCountry(models.Model):
    user = models.ForeignKey(User)
    country = models.ForeignKey(Country) 

Я планирую запустить скрипт, затем добавить запись для каждого суперпользователя и дать им ссылку на страну 0 (т. Е. Нет страны => общий доступ su).Затем я могу удалить эти записи, когда я начну помещать записи, относящиеся к конкретной стране. Поэтому позже я могу позвонить (используя дома в качестве примера):

if user.is_superuser:
    if user.get_profile().super_user_county_link.country == 0:
        #show house detail...
    elsif user.get_profile().super_user_county_link.country == 0
        #show house detail...
    else
        pass

Итак, это должно означать, что я могу перечислитьнесколько стран против одного пользователя, верно?Может быть, я слишком обдумываю это, но выглядит ли это правильно?

Я пришел из php-фона, поэтому я немного сомневаюсь, насколько это правильно ...

1 Ответ

1 голос
/ 20 августа 2010

Поправь меня, если я ошибаюсь.Мне кажется, что вы пытаетесь установить отношения «многие ко многим» между UserProfile и Country.Если так, то лучший способ это сделать - использовать ManyToManyField.Примерно так:

class UserProfile(models.Model):
    countries = models.ManyToManyField(Country)

Вы можете оставить это в покое, не требуя отдельной модели (SuperUserToCountry), если вы не храните другую информацию как часть этих отношений.Если вы планируете хранить другую информацию, для этого тоже есть способ .

Условия blank = True и null = True здесь не нужны.Если ни одна из стран не связана с профилем пользователя, они вернут пустую потерянную (т. Е. an_instance.countries.all() будет пустой).

Когда вы начнете добавлять страны, вы можете сделать что-то вроде этого:

profile = User.get_profile()
denmark = Country.objects.get(name = 'Denmark')
russia  = Country.objects.get(name = 'Russia')

if denmark in profile.countries.all():
    print "Something is rotten in the state of Denmark"
elsif russia in profile.countries.all():
    print "In Soviet Russia, profiles have countries!"

Вышеуказанные условия, скорее всего, можно выразить более точно, исходя из ваших конкретных потребностей.Кстати, вы добавите страну в профиль пользователя, например так:

profile = User.get_profile()
denmark = Country.objects.get(name = 'Denmark')
profile.countries.add(denmark)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...