저장 I는 같은 모델로 RSVP 응용 프로그램에서 일하고 있습니다. jQuery를 사용하여 여러 개의 선택 항목을 2 개의 상자로 향상 시켰습니다. 여기서는 선택한 항목이 오른쪽의 상자에 나타납니다.복수 선택이 필드를
forms.py에서와 crispy_forms
를 사용하여 :
class RSVPSelectGuestForm(forms.Form):
guests = forms.MultipleChoiceField()
def __init__(self, *args, **kwargs):
profile = kwargs.pop('profile', None)
guestlist_pk = kwargs.pop('guestlist_pk', None)
super(RSVPSelectGuestForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.layout = Layout(
Field('guests',
id='guests-multiple-select',
),
FormActions(
Submit('submit', 'Save'),
),
)
self.fields['guests'].choices = [(obj.id, str(obj)) for obj in Guest.objects.filter(profile=profile)]
self.fields['guests'].initial = [(obj.guest_id) for obj in RSVP.objects.filter(guestlist_id=guestlist_pk)]
나는 위의 코드를 제대로 선택 여러 요소를 렌더링 할 수 있어요. 나는 전망에서 모양을 get_form_kwargs
에 kwargs를 통과한다.
질문은 이제 RSVP 테이블에서 게스트를 효율적으로 추가/제거하는 방법입니다. 사용자가 게스트를 선택하면, 그 즉시에 추가된다 - 형태를
프로세스 이벤트가 UI에서 발생 때마다 : 내가 결정할 수 아래 내 제안 된 솔루션 사이에 이동 주저 탁자; 사용자가 사용자의 선택을 취소하면 게스트가 RSVP 테이블에서 제거됩니다. 이로 인해 손님 수가 증가하면 많은 SQL 읽기/쓰기가 발생할 수 있습니다. 양식이 제출 될 때까지
아무것도 저장하지 않습니다 - 포스트 데이터에서 내가 선택한 옵션의 사전을 만들 것 형태는, 새로운 행이 추가되고 누락 된 행이 제거로드 된 상태와 비교 테이블에서. 이 작업은 2 가지 SQL 작업 만 필요합니다.
누구든지이 문제를 해결하기 위해 좋은 해결책이나 더 좋은 아이디어를 제안 할 수 있습니까? 내 제안에서 간과 할 수있는 문제가 있습니까?