Поле "Страна" не заполняется при регистрации в Django
Когда пользователь регистрируется, я хочу добавить его страну в его профиль. Но поле остается пустым в базе данных и не заполняется страной. Я новичок в аутентификации в Django, поэтому могу ошибаться в других аспектах. Думаю, проблема может быть в порядке? Я действительно не уверен.
Views.py
def get_country(ip):
if ip in ['127.0.0.1', 'localhost', '::1']:
return 'Localhost'
# Perform GeoIP lookup
g = GeoIP2()
try:
result = g.city(ip)
country = result["country_name"]
except Exception as e:
print(f'Error: {e}')
country = "Unknown"
return country
def signup_view(request):
if request.method == 'POST':
form = UserCreateForm(request.POST)
if form.is_valid():
user = form.save()
# Get the user's IP address
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
ip = x_forwarded_for.split(',')[0].strip()
else:
ip = request.META.get('REMOTE_ADDR')
# Determine the user's country
country = get_country(ip)
# Create the profile with the country information
username = form.cleaned_data.get('username')
raw_password = form.cleaned_data.get('password1')
Profile.objects.create(user=user, country=country)
user = authenticate(username=username, password=raw_password)
login(request, user)
return redirect('/')
else:
form = UserCreateForm()
return render(request, 'signup.html', {'form': form})
models.py
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
image = models.ImageField(
default='profile_pics/default.jpg', upload_to='profile_pics')
country = models.CharField(max_length=100)
def __str__(self):
return f'{self.user.username} Profile'
@receiver(post_save, sender=User)
def manage_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.get_or_create(user=instance)
Я запустил функцию get_country в оболочке, используя RequestFactory(), и получил правильную страну в зависимости от ip. Таким образом, эта функция работает нормально. Не работает только обновление профиля со страной при регистрации.