2009-12-30 4 views
1

모델을 기반으로 양식을 만들었습니다. 모델에는 많은 분야가 있습니다. 나는 다음과 같이이 필드를 정의했습니다 :django many2many 필드 필요 없음

contacts = models.ManyToManyField(Contact, blank=True, null=True) 

생성 된 양식에서이 필드를 비워 둘 수없는 이유가 궁금합니다. 연락처 필드의 연락처를 선택하지 않으면 항상이 필드가 필요합니다.라는 오류 메시지가 나타납니다.

뭐가 잘못 되었나요?

답변

3

이 필드

class MyForm(forms.ModelForm): 
    contacts=forms.ModelMultipleChoiceField(queryset=Contact.objects.all(),required=False) 
    class Meta: 
    model=MyModel 
+0

예. 감사! –

+0

양식의 현재 인스턴스에만 관련해서 표시해야하는 제한 사항으로 컨택을 필터링하고 싶다면 비즈니스와 관련된 컨택을 모두 표시하지 말아야 함을 의미합니다. 새 양식은 비어 있어야합니다. queryset = Contact.objects.filter (Contact.objects.filter (self.instance. ????) – shahjapan

1

blank=True, null=True을 추가하기 전에 syncdb을 입력했을 가능성이 있습니까?

syncdb은 데이터베이스에 테이블이없는 경우에만 테이블을 만듭니다. 모델 변경은 SQL을 사용하여 데이터베이스에서 수동으로 수행하거나 South과 같은 마이그레이션 도구를 사용하여 수동으로 수행해야합니다.

아직 개발 초기 단계라면 데이터베이스를 삭제하고 syncdb을 다시 실행하는 것이 더 쉽습니다.

+0

required=False로 아니, 난 syncdb를 실행하지 않았다. 또한 장고 진화 http://code.google.com/p/django-evolution/도 실행했습니다. 나는 이것이 또한 문제라고 생각했다. 어쩌면 낙하는 좋은 생각 일 수 있습니다. –

0

null = True를 사용하면 혼란 스럽습니다. manyToMany 필드는 한 모델을 다른 모델과 관련시키는 세 번째 테이블을 생성합니다. 예 :

Business <-> Contact 

business.contacts이 비어 있으면이 테이블에 레코드가 입력되지 않습니다. null=True이 테이블에 NULL 레코드가 추가 될 예정인 것으로 보입니다. 유효하지 않습니다.

일반적으로 은 이러한 속성이 모두입니다. 양식 선언 마크에서

+0

그래도 두 속성을 모두 그대로두면 필수입니다. 실제로 사용자가 적어도 하나의 m2m 관계를 추가해야하는 경우 큰 문제는 아니지만 이것이 성취 될 수있는 방법은 여전히 ​​흥미로울 것입니다. –