我正在嘗試創建一個表單,用於混合來自幾個不同位置的元素。我認爲做這件事的最好方法可能是兩種不同的形式,並將它們顯示在同一頁面上,除非其他人可以幫助我將其全部集成到一個表單中?創建使用來自2個不同模型的屬性的表單
我看到沒有問題,使用2種形式,但我有點不確定如何進行(也許我不需要!)。
我有兩個有點相關的類:人(用戶)和朋友,他們共享PersonBenefits。
模式是這樣的:
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看起來是這樣的:
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
基本上我試圖讓形式顯示的「朋友」名單複選框,然後在他們的名字旁邊,顯示一個用戶可以輸入的文本字段ben_id_num
再次,在閱讀之後,我想有兩種獨立的形式可能是最好的方式去,但我不知道如果也許我只是在我的forms.py中做一些愚蠢的東西,它可以只用1個表單。
這主要是:
對於每一個「朋友」,顯示了與朋友的名字和文本字段的複選框有點形式緊隨其後(相當於其ben_id_num
我正在閱讀formset上的文檔 - 我認爲這可能正是醫生訂購的內容。現在試着看看我能想出什麼!如果它有效,這將是一種享受! – Hanny
@Hanny Formsets採取了一些練習,但一旦習慣了他們,他們真的很方便。祝你好運! – Franey
這工作得很好。實際上,我發現modelformset_factory就是我正在尋找的東西! – Hanny