로 표시 ManyToMany 필드, 나는 장고의 사용자 모델로 ManyToMany 관계가 포함 된 모델 베팅 데 :장고 ModelForms : 장고 응용 프로그램에서 단일 선택
class Bet(models.Model):
...
participants = models.ManyToManyField(User)
사용자가 시작할 수 있어야를 양식을 사용하는 새로운 베팅. 지금까지 배팅에는 정확히 두 명의 참가자가 있으며, 그 중 하나는 직접 배팅을 만드는 사용자입니다. 즉, 새로운 베팅 양식에서는 정확히 한 명의 참가자를 선택해야합니다. 내기 데이터를 저장하면 참가자로 베팅 크리에이터가 추가됩니다.
내 NewBetForm
의 ModelForm를 사용하고 있습니다 : 수
class NewBetForm(forms.ModelForm):
class Meta:
model = Bet
widgets = {
'participants': forms.Select()
}
def save(self, user):
... # save user as participant
공지 참가자 필드에 대한 재정의 위젯은 당신이 하나 명의 참가자를 선택할 수 있습니다.
Enter a list of values.
나는이 어디에서 오는지 정말 확실하지 않다 :
그러나, 이것은 나에게 유효성 검사 오류를 제공합니다. 개발자 도구에서 POST 데이터를 보면 기본 위젯을 사용하고 하나의 참여자 만 선택하는 것과 똑같은 것으로 보입니다. 그러나 ManyToManyField의 to_python()
메소드가이 데이터에 문제가있는 것처럼 보입니다. 적어도 Select 위젯을 사용 가능하게하면 User 오브젝트가 작성되지 않습니다.
양식에서 참여자 필드를 제외하고이 양식을 직접 정의하면이 문제를 해결할 수 있지만 ModelForm의 용량을 계속 사용할 수 있으면 훨씬 좋을 것입니다. (결국 위젯이 변경된 것입니다.) 어쩌면 내가 어떻게 하는지를 안다면 어떤 방법으로 전달 된 데이터를 조작 할 수 있습니다.
누구든지 문제가 정확히 무엇인지 말할 수 있습니까? 해결할 수있는 좋은 방법이 있습니까?
미리 감사드립니다. 코멘트에 제안으로
편집
:보기의 (관련) 코드.
def new_bet(request):
if request.method == 'POST':
form = NewBetForm(request.POST)
if form.is_valid():
form.save(request.user)
... # success message and redirect
else:
form = NewBetForm()
return render(request, 'bets/new.html', {'form': form})
m2m 관계의 배경은 나중에 두 명 이상의 참가자가있는 베팅에 기능을 확장 할 수 있다는 것입니다. 그래서 저는 m2m이 적절하다고 생각합니다. – j0ker