NOT NULL constraint failed: dashboard_profile.user_id
Я пытаюсь сохранить последний IP пользователя в модуле Profile в Django, но я получаю всегда NOT NULL constraint failed Я знаю, что last_ip должен быть установлен на null=True и я выполняю эти команды:py .\manage.py makemigrations и py .\manage.py migrate. если у вас есть какие-либо предложения по сохранению IP пользователя, это будет полезно для меня.
Заранее спасибо.
#models.py
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
bio = models.TextField(blank=True, max_length=150)
last_ip = models.GenericIPAddressField(null=True, blank=True)
avatar = ContentTypeRestrictedFileField(max_upload_size=10485760, null=True, verbose_name="",default='default.jpg', blank= True, content_types=['image/png', 'image/jpeg'])
def __str__(self):
return self.user.username
#forms.py
class UpdateUserForm(forms.ModelForm):
username = forms.CharField(max_length=150, required=True)
first_name = forms.CharField(max_length=150, required=False)
last_name = forms.CharField(max_length=150, required=False)
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ['username','first_name','last_name','email']
class UpdateAvatarBio(forms.ModelForm):
avatar = forms.ImageField()
bio = forms.CharField()
class Meta:
model = Profile
fields = ['avatar', 'last_ip', 'bio']
#views.py
def ip_client(request):
return (
x_forwarded_for.split(',')[0]
if (x_forwarded_for := request.META.get('HTTP_X_FORWARDED_FOR'))
else request.META.get('REMOTE_ADDR')
)
def profile(request):
ip = ip_client(request)
model = Profile(last_ip=ip)
model.save() # Traceback suppose here is the issue
if request.method == 'POST':
...
...
return render(request, 'profile.html', {'user_form': user_form, 'profile_form': profile_form})
Вы не добавили пользователя в Профиль перед его сохранением
def profile(request):
ip = ip_client(request)
model = Profile(last_ip=ip)
user=request.user #Add this
model.save() # Traceback suppose here is the issue
if request.method == 'POST':
...
...
return render(request, 'profile.html', {'user_form': user_form, 'profile_form': profile_form})