2015-08-12 3 views
0

У меня есть группы и люди, я хочу, чтобы внутри группы не могло быть более одного человека с тем же именем ... но в разных группах это нормально ... довольно легко. Мой код:Django - Очистить поле, обратитесь к Связанному объекту

class Group(model.Model): 
    name = models.CharField() #irrelevant 

class Person(models.Model): 
    name = models.CharField(max_length=255, unique=False) 
    related_group = models.ForeignKey(Group) 


    def clean(self): 
     if self.related_group: 
      for pip in self.related_group.person_set.all(): 
       if pip.name == self.name: 
        raise ValidationError("Name already exists in this Group") 

Я получаю эту ошибку:

RelatedObjectDoesNotExist at /create/person/ # the url of creating the object 

Человек не имеет related_group.

Я думаю, проблема в том, что мне нужно найти способ обратиться к группе (в форме) спасибо.

ответ

2

Вы должны иметь возможность использовать unique_together, тогда вам не понадобятся чеки в вашем методе clean.

class Person(models.Model): 
    name = models.CharField(max_length=255, unique=False) 
    related_group = models.ForeignKey(BreadcrumbGroup) 

    class Meta: 
     unique together = [ 
      ('name', 'related_group'), 
     ] 
+0

Это работает, но, к сожалению, это вызывает ошибку целостности, а не «Ошибка проверки», есть ли что-то, что я могу сделать, чтобы поднять ошибку проверки? почему в первую очередь он не получает связанную_группу, которую он должен получить? –

+1

Если вы используете модельные формы, для вас нужно проверить «unique_together», если только вы не исключили одно из полей формы. Можете ли вы показать свое мнение? – Alasdair

+0

@Alasdair Вы должны включить использование '' 'get_or_create'' и/или' '' update_or_create'' в свой ответ, чтобы показать, как создавать/обновлять Person. – schillingt

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