Как получить текущий URL в формах Django? - PullRequest
0 голосов
/ 16 октября 2018

Я хотел бы проверить URL-путь, чтобы на нем можно было создать форму.В представлении мы можем использовать параметр запроса для получения пути URL-адреса, существует ли аналогичный способ, чтобы мы могли получить текущий URL-адрес внутри forms.py?

URL=??
if URL == 'phones':
      brand_choises= (('Sumsung', 'Sumsung'),
                     ('Iphon', 'Iphone'),)
if URL == 'cars':
      brand_choises= (('Honda', 'Honda'),
                     ('Toyota', 'Toyota'),)
class Productform(forms.ModelForm):
    brand=forms.ChoiceField(choices=brand_choises,widget=forms.Select(attrs={'class':'products'}))
    class Meta:
      model = Product

   def __init__(self, *args, **kwargs):
     super(ProductForm, self).__init__(*args, **kwargs)
     self.fields['brand'].choices = brand_choises

1 Ответ

0 голосов
/ 16 октября 2018

Вы не можете сделать это так.Все, что находится на уровне модуля или на уровне класса, определяется при первом импорте модуля, поэтому не может зависеть от URL-адреса.Единственное, что вы можете сделать, - это передать параметр при создании экземпляра формы и изменить выбор, основываясь на этом.Вы можете использовать dict для хранения вариантов выбора, так что форма может просто выбрать соответствующий параметр из параметра:

CHOICE_DICT = {
  'phone': (
    ('Samsung', 'Samsung'),
    ('iPhone', 'iPhone'),
  )
  'car': (
    ('Honda', 'Honda'),
    ('Toyota', 'Toyota'),
  )
}

class Productform(forms.ModelForm):
    brand=forms.ChoiceField(choices=brand_choises,widget=forms.Select(attrs={'class':'products'}))
    class Meta:
      model = Product

   def __init__(self, *args, **kwargs):
     form_type = kwargs.pop('form_type', None)
     super(ProductForm, self).__init__(*args, **kwargs)
     self.fields['brand'].choices = CHOICE_DICT[form_type]

, и тогда в вашей форме вы сделаете form = Productform(form_type='car') или что-то еще.Не забудьте передать его как на POST, так и на GET.

...