Проблема с установкой приспособлений - дублирующееся значение ключа нарушает уникальное ограничение "profiles_userprofile_user_id_key" : Ключ (user_id)=(2) уже существует
Я создал проект Django с данными на mysql. Я выполнил дамп данных для переноса проекта на postgres и Heroku/AWS, но когда я запускаю python3 manage.py loaddata db.json для загрузки данных в postgres, я получаю следующую ошибку
django.db.utils.IntegrityError: Проблема установки приспособления '/workspace/press_records/db.json': Could not load profiles.UserProfile(pk=1): дублирующее значение ключа нарушает уникальное ограничение "profiles_userprofile_user_id_key". ПОДРОБНАЯ ИНФОРМАЦИЯ: Ключ (user_id)=(2) уже существует.
Моя модель:
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
from django_countries.fields import CountryField
class UserProfile(models.Model):
"""
A user profile model for maintaining default
delivery information and order history
"""
user = models.OneToOneField(User, on_delete=models.CASCADE)
default_phone_number = models.CharField(max_length=20, null=True, blank=True)
default_street_address1 = models.CharField(max_length=80, null=True, blank=True)
default_street_address2 = models.CharField(max_length=80, null=True, blank=True)
default_town_or_city = models.CharField(max_length=40, null=True, blank=True)
default_county = models.CharField(max_length=80, null=True, blank=True)
default_country = CountryField(blank_label='Country', null=True, blank=True)
default_postcode = models.CharField(max_length=20, null=True, blank=True)
def __str__(self):
return self.user.username
@receiver(post_save, sender=User)
def create_or_update_user_profile(sender, instance, created, **kwargs):
"""
Create or update the user profile
"""
if created:
UserProfile.objects.create(user=instance)
# Existing users: just save the profile
instance.userprofile.save()
Моя форма
from django import forms
from .models import UserProfile
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
exclude = ('user',)
def __init__(self, *args, **kwargs):
"""
Add placeholders and classes, remove auto-generated
labels and set autofocus on first field
"""
super().__init__(*args, **kwargs)
placeholders = {
'default_phone_number': 'Phone Number',
'default_postcode': 'Postal Code',
'default_town_or_city': 'Town or City',
'default_street_address1': 'Street Address 1',
'default_street_address2': 'Street Address 2',
'default_county': 'County, State or Locality',
}
self.fields['default_phone_number'].widget.attrs['autofocus'] = True
for field in self.fields:
if field != 'default_country':
if self.fields[field].required:
placeholder = f'{placeholders[field]} *'
else:
placeholder = placeholders[field]
self.fields[field].widget.attrs['placeholder'] = placeholder
self.fields[field].widget.attrs['class'] = 'border-black rounded-0 profile-form-input'
self.fields[field].label = False
Мое мнение
from django.shortcuts import render, get_object_or_404
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from .models import UserProfile
from .forms import UserProfileForm
from checkout.models import Order
@login_required
def profile(request):
""" Display the user's profile. """
profile = get_object_or_404(UserProfile, user=request.user)
if request.method == 'POST':
form = UserProfileForm(request.POST, instance=profile)
if form.is_valid():
form.save()
messages.success(request, 'Profile updated successfully')
else:
messages.error(request, 'Updated failed. Please ensure the form is valid.')
else:
form = UserProfileForm(instance=profile)
orders = profile.orders.all()
template = 'profiles/profile.html'
context = {
'form': form,
'orders': orders,
'on_profile_page': True
}
return render(request, template, context)
Я пробовал следующее в своем посте сохранить в модели согласно некоторым другим запросам на этом сайте, но это не помогло
@receiver(post_save, sender=User)
def create_or_update_user_profile(sender, instance, created, **kwargs):
"""
Create or update the user profile
"""
if created:
UserProfile.objects.get_or_create(user=instance)
# Existing users: just save the profile
instance.userprofile.save()
Любая помощь будет очень признательна