Python 基于全局(上下文/会话)变量的Django动态表单

Python 基于全局(上下文/会话)变量的Django动态表单,python,django,inheritance,metaclass,Python,Django,Inheritance,Metaclass,我们已经实现了中间件,它告诉我们当前用户的国家代码是什么。我们需要完成的是使用该变量在Django中动态加载特定于国家/地区的表单,然后呈现模板(我们已经解决了模板部分)。这用于在每次呈现AddressForm(以下)时显示不同国家/地区的不同邮政地址表单 class Address(models.Model): address_1 = models.CharField(max_length=128) address_2 = models.CharField(max_length

我们已经实现了中间件,它告诉我们当前用户的国家代码是什么。我们需要完成的是使用该变量在Django中动态加载特定于国家/地区的表单,然后呈现模板(我们已经解决了模板部分)。这用于在每次呈现AddressForm(以下)时显示不同国家/地区的不同邮政地址表单

class Address(models.Model):
    address_1 = models.CharField(max_length=128)
    address_2 = models.CharField(max_length=128)
    address_3 = models.CharField(max_length=128)
    city = models.CharField(max_length=128)
    state_province = models.CharField(max_length=64)
    sublocale = models.CharField(max_length=64)
    postal_code = models.CharField(max_length=16)
    zip4 = models.CharField(max_length=4)


class AddressFormUS(ModelForm):
    """Form for United States addresses"""
    class Meta:
        fields = ('address_1', 'address_2', 'city', 'state_province', 'postal_code', 'zip4')

    def __init__(self, *args, **kwargs):
        super(AddressFormUS, self).__init__(*args, **kwargs)
        # Set up labels, required, etc.  specific to the country


class AddressFormAE(ModelForm):
    """Form for United Arab Emirates addresses"""
    class Meta:
        fields = ('address_1', 'address_2', 'address_3', 'city', 'state_province', 'sublocale', 'postal_code', 'zip4')

    def __init__(self, *args, **kwargs):
        super(AddressFormAE, self).__init__(*args, **kwargs)
        # Set up labels, required, etc. specific to the country


class AddressFormMeta(type):
    """Metaclass for AddressForm"""
    def __new__(cls, name, bases, attrs):
         # Retrieve the global country
         country = get_country_code_here()

         # There is a dictionary that contains the country code and corresponding form
         # {'US': AddressFormUS, 'AE': AddressFormAE}
         # We could also use a regex
         form = country_form_dict.get(country)

         return form


class AddressForm(object):
    __metaclass__ = AddressFormMeta


class SomeOtherForm(AddressForm):
    # More fields about the user + address info
    pass
以上是一个问题。第一次导入类时,仅加载一次。我需要它根据用户的国家/地区进行更改。我不知道如何在更新以提取正确的国家/地区表单时动态地继承它。任何想法都会很棒。也许我做得不对,有人有更好的方法/建议。提前谢谢