Django에서 다 대다 필드를 선택적으로 만들려면 어떻게해야합니까?


202

다 대다 관계 ( related_name, not through)가 있고 관리 인터페이스를 사용하려는 경우 첫 번째 항목을 작성하기 위해 관계가 존재하지 않아도 관계 중 하나를 입력해야합니다.

이벤트 주최자 인 앱을 만들고 있습니다. 다 대다 관계에 묶인 모델 EventGroup모델을 상상해보십시오 .

Django는 related_name다른 두 테이블의 인덱스로 다른 테이블을 만듭니다.
그러나이 여분의 테이블 채워야하는 이유는 없습니다 .

phpMyAdmin을 통해 데이터베이스로 작업하는 경우을 Group등록하지 않고을 만들 수 있습니다. Event두 개 사이의 연결은 별도의 테이블을 통해서만 이루어지며 주어진 수준에서 데이터베이스 값 시행이 없기 때문입니다.

관리자 인터페이스에서이를 실현 시키려면 어떻게해야합니까?
Django에서 다 대다 필드를 선택적으로 만들려면 어떻게해야합니까?

답변:


348

ManyToMany 관계를 지정하지 않고 지정하려면 blank=True다음을 사용하십시오 .

class Group(models.Model):
    ...
    events = models.ManyToManyField(Event, blank=True)

7
이것은 문제를 해결합니다. 나는 많은 사람들이 이벤트를 그룹 (events = models.ManyToManyField (Event, related_name = "groups", blank = True)과 연결하는 테이블을 생성했다고 생각했기 때문에 공백을 사용하는 것이 나에게 분명하지 않았습니다. 이벤트가 실제로 그룹 테이블의 필드가 아니기 때문에 공백입니다. 어쨌든 정말 고맙습니다 !!!
DZ.

9
@omouse 예라고 생각합니다. 공백은 django 유효성 검사를위한 것이고 데이터베이스는 null입니다. (IntegerField에 대한 같은) 사건의 이런 종류의 그것은 내가 생각하는 다른없이 1 점을 추가하는 듯 아무 의미하지 않는다
lajarre

17
정말로 필요 null=True합니까? 나는 인상이었다 null어떤에 영향이없는 ManyToMany: 필드 stackoverflow.com/questions/18243039/...
타일러 헤이스

5
네, @TylerHayes가 맞습니다. null = True는 기본적으로 no-op이며 ManyToMany와 관련하여 의미가 없습니다. 내가 어떻게 잘못인지 보여줄 수 있습니다.
벤 로버츠

7
null = 최소한 Django 1.5부터는 True가 필요하지 않습니다.
Ville Laurikari
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.