2014-09-24 2 views
0

У меня есть модель под названием Event и модель Person. Я хочу иметь возможность определять роли для события и уметь назначать много людей роли событий. Каждый человек может участвовать только в одной роли для Мероприятий. Каков наилучший способ создания этих отношений в моих моделях?Django уникальное отношение

ответ

1

Возможно, так?

class Event(models.Model): 
    name = models.CharField(...) 
    ... 

# a role is created and assigned to an event. 
class Role(models.Model): 
    event = models.ForeignKey(Event) 
    ... 


# person is created and assigned a role. I would foreignkey to the role so the person can only be assigned to one role. And not several roles assigned to one person. 
class Person(models.Model): 
    role = models.ForeignKey(Role) 
    ... 

Создать событие: Концерт

Создание роли: Bouncer.event = Концерт

Создайте несколько человек: Jim.role = Bouncer, John.role = Bouncer, и т.д ..

+0

С этим может быть только один человек. Мне нужно много людей, чтобы быть в роли, но только одна роль в каждом событии. – barchiesi

+0

Я не думаю, что это правильно. Это было бы правдой, если бы «unique» был установлен как true. 'role = models.ForeignKey (Role, unique = True)' Как это, вы можете создать несколько объектов Person и указать их все на один и тот же объект Role, а затем указать, что объект Role для объекта Event. – teewuane

+0

Итак, что же это такое, что говорит, что Джим может быть только вышибалой, а не какой-то другой ролью для этого события? – barchiesi

1

Вам нужна модель Role:

class Event(models.Model): 
    # ... 

class Person(models.Model): 
    # ... 

class Role(models.Model): 
    event = models.ForeignKey(Event) 
    person = models.ForeignKey(Person) 
    # ... 

Таким образом, событие может иметь несколько ролей, каждая из них которым управляет один человек.

+0

Я хочу, чтобы у каждой роли было много людей, но каждый человек может быть только одной ролью для конкретного события. – barchiesi

Смежные вопросы