몇 가지 다른 장소의 요소를 블렌드하는 폼을 만들려고합니다. 나는 이것을 할 수있는 최선의 방법이 다른 두 가지 형태 일 수 있으며, 다른 누군가가 그 모든 것을 하나의 형태로 다룰 수 있도록 도울 수 없다면, 같은 페이지에 그들을 보여줄 것이라고 생각한다.두 개의 다른 모델의 특성을 사용하는 폼 만들기
두 가지 양식을 사용하는 데 아무런 문제가 없지만 진행 방법이 확실하지 않습니다. 어쩌면 진행할 필요가 없습니다.
필자는 Person (User) 및 Friend와 PersonBenefits를 공유하는 두 가지 클래스가 있습니다.
모델은 다음과 같이 보일 것이다 : 기본적으로
class GoodBenefitForm(forms.Form):
benefit = forms.ModelChoiceField(
queryset=Benefit.objects.filter(type__name='Good'),
widget = forms.Select(attrs={'class':'g-1-3'})
)
# THIS SHOWS A LIST OF ALL THE FRIENDS FOR THIS USER - DISPLAYS THEIR NAMES NICELY WITH CHECKBOXES
friend = forms.ModelMultipleChoiceField(
queryset = Friend.objects.none(),
widget = forms.CheckboxSelectMultiple(),
)
# I WANT THIS TO BE A BUNCH OF TEXTBOXES INSTEAD OF CHECKBOXES - ONE FOR EACH FRIEND FOR THE USER
friend_group_id = forms.ModelMultipleChoiceField(
queryset = Friend.objects.none(),
widget = forms.CheckboxSelectMultiple(),
)
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user')
queryset = Friend.objects.filter(person=self.user)
super(FriendBenefitForm, self).__init__(*args, **kwargs)
self.fields['friend'].queryset = queryset
self.fields['friend_group_id'].queryset = queryset
내가 '친구'의 목록을 표시하는 양식을 얻으려고 :
는class PersonBenefit(models.Model):
benefit = models.ForeignKey(Benefit, null=True)
user = models.ForeignKey(User)
class Friend(models.Model):
first_name = models.CharField(max_length=40)
last_name = models.CharField(max_length=40)
has_benefit = models.BooleanField(default=False)
ben_id_num = models.CharField(max_length=10, blank=True, null=True)
person = models.ForeignKey(User)
#good, better, best
class BenefitType(models.Model):
name = models.CharField(max_length=25)
def __str__(self):
return self.name
class Benefit(models.Model):
type = models.ForeignKey(BenefitType)
name = models.CharField(max_length=25)
forms.py이 같이 보입니다 확인란을 선택한 다음 이름 옆에 사용자가 입력 할 수있는 텍스트 필드를 표시합니다. ben_id_num
다시 읽은 후, 두 개의 개별 양식을 사용하면 갈 수있는 최선의 방법이 될지 모르겠지만 어쩌면 내가 단지 내 form.py에서 바보 같은 짓을하는지, 단지 하나의 양식으로 작동 할 수 있는지 잘 모르겠다. 각 '친구'를 들어
을 즉시 ben_id_num
지금 formset의 문서를 읽고 있습니다. 의사가 주문한 것일 수도 있습니다. 내가 지금 생각해 낼 수있는 것을보기 위해 지금 시도하고있다! 그것이 효과가 있다면, 이것은 대접이 될 것입니다! – Hanny
@Hanny Formsets는 약간의 연습을하지만, 익숙해지면 정말 편리합니다. 행운을 빕니다! – Franey
잘 돌아갔습니다. 사실 modelformset_factory가 내가 찾고 있던 모델이라는 사실을 알았습니다! – Hanny