Django PhoneNumberField库在使用引导类时出现问题

Django PhoneNumberField库在使用引导类时出现问题,django,Django,我正在使用PhoneNumberField库。但是当我访问这个字段并给出bootstrap类时,布局就改变了。它在一行显示PhoneNumberPrefixWidget,在另一行显示PhoneNumberField。我希望它们彼此相邻显示。我尝试使用for循环,但仍然无法得到我想要的 forms.py phone_no = PhoneNumberField( widget=PhoneNumberPrefixWidget(attrs={'class': 'form-control'

我正在使用PhoneNumberField库。但是当我访问这个字段并给出bootstrap类时,布局就改变了。它在一行显示PhoneNumberPrefixWidget,在另一行显示PhoneNumberField。我希望它们彼此相邻显示。我尝试使用for循环,但仍然无法得到我想要的

forms.py

phone_no = PhoneNumberField(
        widget=PhoneNumberPrefixWidget(attrs={'class': 'form-control'})
    )
在settings.py中

PHONENUMBER_DB_FORMAT = 'NATIONAL'
PHONENUMBER_DEFAULT_REGION = 'BT'
在我的html模板中

{{ form.phone_no }}
是否有单独访问此字段的方法?默认情况下,当我访问{{form.phone_no}时,这两个字段同时出现


提前感谢

您可以通过扩展关注的
多窗口小部件
类,从模板中单独访问元素,并添加以下功能:

class CustomPhoneNumberPrefixWidget(PhoneNumberPrefixWidget):
    def subwidgets(self, name, value, attrs=None):
        context = self.get_context(name, value, attrs)
        return context['widget']['subwidgets']
现在,您不应该使用
PhoneNumberRefixWidget
,而应该使用
CustomPhoneNumberRefixWidget
,如下所示:

class ContactForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        contact_widgets = self.fields['primary_contact'].widget.widgets
        contact_widgets[0].attrs.update({'class': 'col-4 form-select'})
        contact_widgets[1].attrs.update({'class': 'col-8 form-control'})

    class Meta:
        model = BookerProfile
        fields = (
            'primary_contact',
            'address',
            'town',
            'postcode',
        )
        widgets = {
            "primary_contact" : CustomPhoneNumberPrefixWidget(),
            "address" : widgets.Textarea(attrs={'class': 'form-control'}),
            "town" : widgets.TextInput(attrs={'class': 'form-control'}),
            "post" : widgets.TextInput(attrs={'class': 'form-control'}),
        }
然后,您可以像这样(或在循环中)在模板中分别访问这两个元素:


请在这里发表评论,然后回答这个问题。我也有同样的问题。事实上,当我使用
PhoneNumberPrefixWidget
时,我也会遇到验证错误的问题。这里的细节
{{ object.primary_contact.subwidgets.0 }}
{{ object.primary_contact.subwidgets.1 }}