Ограничение FOREIGN KEY не работает Django Models
Я создаю небольшое приложение на django, используя AllAuth для аутентификации, который я настроил самостоятельно, чтобы включить некоторые дополнительные поля.
Часть функциональности сайта требует, чтобы я многократно ссылался на вошедшего пользователя через внешний ключ, и я делаю это с помощью созданной мной пользовательской модели UserProfile; (я пробовал использовать модель Django User & это также дало мне ошибки)
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
phone_number = models.CharField(max_length=30, null=False)
postcode = models.CharField(max_length=500, null=True, blank=True)
town_or_city = models.CharField(max_length=40, null=True, blank=True)
street_address1 = models.CharField(max_length=80, null=True, blank=True)
street_address2 = models.CharField(max_length=80, null=True, blank=True)
county = models.CharField(max_length=80, null=True)
Я ссылаюсь на вышеуказанную модель в таблице активности:
class Activity(models.Model):
class Meta:
verbose_name_plural = 'Activities'
activity_id = models.CharField(max_length=32, null=False, editable=False)
host = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
name = models.CharField(max_length=254, null=False, blank=False)
date = models.DateField()
start_time =models.TimeField()
end_time = models.TimeField()
duration = models.DurationField(blank=True, null=True)
location = models.CharField(max_length=40, null=False, blank=False)
description = models.CharField(max_length=140, null=False, blank=False)
available = models.BooleanField(default=True)
Все работает гладко, поскольку я могу использовать это для создания одной активности для каждого пользователя, однако я хочу сделать это поле "многие к одному", что потребовало от меня обновления из settings.AUTH_USER_MODEL в Foreign Key.
К сожалению, я получаю следующую ошибку:
FOREIGN KEY constraint failed
когда я пытаюсь добавить новую деятельность сейчас, и я в растерянности, почему это происходит.
Если кто-то может указать мне правильное направление, как создать эту функциональность "многие к одному", это было бы здорово.
Я не могу видеть весь ваш код, поэтому ответ может быть неправильным, но похоже, что у вас нет Primary Key в UserProfile
ForeignKey По умолчанию принимает первичный ключ в качестве аргумента
Потенциальное решение:
class Activity(models.Model):
host = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile', primary_key=True)
Если это не решит вашу проблему, пожалуйста, поместите полное сообщение об ошибке
На основании предоставленной вами информации я могу предположить, что произошло то, что у вас потенциально есть пользователь, у которого нет профиля пользователя, поэтому, когда вы пытаетесь создать активность, она терпит неудачу с указанной вами ошибкой. С другой стороны, это может быть связано с тем, как вы отображаете и проверяете свои формы. Кроме того, это может быть связано с тем, как вы используете представления на основе классов или представления на основе функций.
В любом случае, пожалуйста, предоставьте всю возможную информацию. Как правило, требуется вся информация, а не только та часть, в которой вы не уверены.
Как создать деятельность?
Как вы проверяете свои формы?
Как заполняется идентификатор профиля пользователя?
Предоставив больше информации, я с радостью отвечу, так как это кажется прямым вопросом