Другое событие NullPointerException
возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.
String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals
для гарантированного непустого объекта.
Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null
.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
записи zacherates:
Я смоделировал бы Роль класса ассоциации между Пользователями и Роли (...)
Я был бы также reccomed это решение, но можно также использовать немного синтаксического сахара, обеспеченного Django: отношение ManyToMany с дополнительными полями.
Пример:
class User(models.Model):
name = models.CharField(max_length=128)
class Event(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(User, through='Role')
def __unicode__(self):
return self.name
class Role(models.Model):
person = models.ForeignKey(User)
group = models.ForeignKey(Event)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
Я рекомендовал бы просто создать совершенно отдельную модель для этого.
class Assignment(Model):
user = ForeignKey(User)
role = ForeignKey(Role)
event = ForeignKey(Event)
Это позволяет Вам сделать весь обычный образцовый материал, такой как
user.assignment_set.filter(role__name="Chaperon")
role.assignment_set.filter(event__name="Silly Walkathon")
Единственная оставленная вещь состоит в том, чтобы осуществить Ваше one-role-per-user-per-event ограничение. Можно сделать это в классе Присвоения или переопределением метода сохранения (http://docs.djangoproject.com/en/dev/topics/db/models/#overriding-predefined-model-methods) или использованием сигналов (http://docs.djangoproject.com/en/dev/topics/signals/)
Я смоделировал бы Роль класса ассоциации между Пользователями и Роли, таким образом,
class User(models.Model):
...
class Event(models.Model):
...
class Role(models.Model):
user = models.ForeignKey(User)
event = models.ForeignKey(Event)
И осуществите одну роль на пользователя на событие или в менеджере или в ограничениях SQL.