2017-04-09 7 views
0

나는 다음과 같은 모델이 있습니다장고 모델 자체 참조 : 자체에 참조 방지

class Category(models.Model): 
    name = models.CharField(max_length=255) 
    parent = models.ForeignKey('self', related_name='children') 

내 질문은을 그 나는 자체 (동일한 개체를) 참조로 모델을 방지 할 수있는 방법. 개체는 다른 범주 만 가리킬 수 있어야하지만 '부모'동물은 가질 수 있지만 부모는 가질 수 없습니다. '

답변

1

save 메서드를 무시하고 예외를 throw 할 수 있습니다 :

def save(self, *args, **kwargs): 
    if self.parent and self.parent.name == self.name: 
     raise ValidationError('You can\'t have yourself as a parent!') 
    return super(Category, self).save(*args, **kwargs) 
+0

실무 실 거예요. self.parent는 여전히'self'가 여전히 존재하지 않는'id' 속성을 가지고 있습니다. 당신은'self.parent.name == self.name'을 할 수 있습니다. – itzMEonTV

+0

여러분, 지금 당장 옳은 길입니다. 그러나 후자는 작동하지 않을 것이고, 부모가 없다면 AttributeError를 제공하므로 (필수 필드가 아님) "if self.parent and self.parent.name == self.name :"을 추가했습니다. 이제는 작동하지만 잘못된 값은 관리자 선택형 드롭 다운에 계속 표시됩니다. 양식 등이 사용자에게 그 가치를 제안하지 못하도록하는 방법은 무엇입니까? 적어도 해당 게시물을 수정하여 AttributeError 부분을 수정하면 받아 들일 것입니다. – m5seppal