Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # forms.py
- class ProfileForm(forms.ModelForm):
- city = forms.ModelChoiceField(queryset=None)
- def __init__(self, *args, **kwargs):
- if 'region' in kwargs:
- # добавление городов только из указанного региона
- region = kwargs.pop('region')
- super(ProfileForm, self).__init__(*args, **kwargs)
- self.fields['city'].queryset = region.city_set.all()
- elif 'data' in kwargs:
- # при создании bound form нужно взять регион из данных
- # если оставить queryset пустым, то форма не будет валидна
- # к тому же, форма не должна терять данные юзера между сабмитами
- super(ProfileForm, self).__init__(*args, **kwargs)
- region_id = self['region'].value()
- region = Region.objects.get(pk=region_id)
- self.fields['city'].queryset = region.city_set.all()
- class Meta:
- model = Profile
- fields = ['country', 'region']
- # views.py
- def signup(request):
- if request.method == 'POST':
- pform = ProfileForm(data=request.POST)
- if pform.is_valid():
- return HttpResponse('%s' % pform)
- else:
- # определение гео пришедшего юзера
- ip = request.META.get('REMOTE_ADDR', '') or request.META.get(
- 'HTTP_X_FORWARDED_FOR', '')
- info = get_ip_info(ip)
- region = Region.objects.filter(name__contains=info['region'])[0]
- city = City.objects.filter(name__contains=info['city'])[0]
- pform = ProfileForm(region=region,
- initial={'region': region.id, 'city': city.id,
- 'country': 1
- })
- return render(request, 'authenticate/signup.html', {
- 'pform': pform,
- 'message': message,
- })
- # тут все стандартно
- # models.py
- class Country(models.Model):
- id = models.IntegerField(primary_key=True)
- name = models.CharField(max_length=100)
- rank = models.IntegerField(default=0)
- def __str__(self):
- return '{}'.format(self.name)
- class Region(models.Model):
- id = models.IntegerField(primary_key=True)
- name = models.CharField(max_length=100)
- country = models.ForeignKey(Country, on_delete=models.CASCADE, default=0)
- rank = models.IntegerField(default=0)
- def __str__(self):
- return '{}'.format(self.name)
- class City(models.Model):
- id = models.IntegerField(primary_key=True)
- region = models.ForeignKey(Region, on_delete=models.CASCADE)
- name = models.CharField(max_length=100)
- center = models.BooleanField(default=False)
- rank = models.IntegerField(default=0)
- def __str__(self):
- return '{}'.format(self.name)
- class Profile(models.Model):
- id = models.IntegerField(primary_key=True)
- user = models.ForeignKey(settings.AUTH_USER_MODEL,
- on_delete=models.CASCADE)
- country = models.ForeignKey(Country, on_delete=models.CASCADE)
- region = models.ForeignKey(Region, on_delete=models.CASCADE)
- city = models.ForeignKey(City, on_delete=models.CASCADE)
- bday = models.DateField()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement