我正在尝试创建一个表单,用于混合来自几个不同位置的元素。我认为做这件事的最好方法可能是两种不同的形式,并将它们显示在同一页面上,除非其他人可以帮助我将其全部集成到一个表单中?创建使用来自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