【问题标题】:default value doesnt work in formset - django默认值在表单集中不起作用 - django
【发布时间】:2026-02-19 07:45:01
【问题描述】:

我正在尝试为我的 django 内联表单集设置默认值,但它只显示第一个表单,其他为空!

class Booking(models.Model):
    admin = models.ForeignKey(User,on_delete=models.CASCADE)
    takes_by = models.ManyToManyField('vistors.Vistor',through='BookingVisitor',related_name='vistors')

class BookingVisitor(models.Model):
    visitor = models.ForeignKey('vistors.Vistor',on_delete=models.PROTECT,related_name='visitor_booking')
    booking = models.ForeignKey(Booking,on_delete=models.PROTECT,related_name='booking_bookingvisitors')
    reason = models.CharField(max_length=50,default='some text')

但它不起作用!?在我看来,我也试过这个

initial_data = {'reason':'some text'}
VistorsInlineFormset(prefix='formset',initial=initial_data) 

但它会引发此错误:

/en/some/url 处的 KeyError 0

这是我的forms.py

class BookingVisitorForm(forms.ModelForm):
    visitor = forms.ModelChoiceField(
    queryset=Vistor.objects.all().order_by('-pk'),empty_label='--------',

    )

    class Meta:
        model = BookingVisitor
        fields = ['visitor','reason']

VistorsInlineFormset = inlineformset_factory(Booking,BookingVisitor,form=BookingVisitorForm,extra=1,can_delete=True)

【问题讨论】:

    标签: django default formset inline-formset


    【解决方案1】:

    来自docs

    >>> formset = ArticleFormSet(initial=[
    ...     {'title': 'Django is now open source',
    ...      'pub_date': datetime.date.today(),}
    ... ])
    

    所以你的代码应该是:

    initial_data = [{'reason':'some text'},] # a list
    VistorsInlineFormset(prefix='formset',initial=initial_data) 
    

    【讨论】:

    • 感谢您的回复,但它仅适用于第一个表单,因为其他内联表单集显示空白字段
    • 这就是重点。您可以在该列表中为第二个、第三个添加更多对象......
    • 我做了但还是不行initial_data = [{'reason':'text'},{'reason':'text'}]