Django: как создать уникальный экземпляр одной модели в качестве поля в другой модели
Я пытаюсь сохранить экземпляр модели Item
в качестве поля в моей модели пользователей, используя ForeignKey
следующим образом:
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
username = models.CharField(max_length=255)
items = models.ForeignKey('Item', on_delete=models.CASCADE)
def __str__(self):
return self.username
class Item(models.Model):
stats = models.JSONField(null=True)
name = models.CharField(max_length=255)
def __str__(self):
return self.name
Однако в настоящее время, когда я проверяю свою админ-панель Django, кажется, что каждый новый пользователь использует один и тот же список элементов (по сути, в настоящее время существует только один экземпляр Item
, который используется всеми пользователями). Вместо этого я хочу, чтобы у каждого пользователя был свой собственный список элементов, не связанный со списком других пользователей. Есть ли способ сделать так, чтобы у каждого пользователя было поле в его учетной записи, которое является уникальным экземпляром модели Items?
Ваша ForeignKey
имеет неверное направление. Внешний ключ - это отношение "многие к одному", поэтому существующая структура модели подразумевает "многие UserProfile
к одному Item
".
Это должно быть в модели Item
:
class Item(models.Model):
user_profile = models.ForeignKey(
UserProfile, on_delete=models.CASCADE, related_name="items"
)
...
Имя поля ForeignKey
всегда должно быть единственным, а related_name
(т.е. обратное отношение) - множественным, чтобы и my_user_profile.items
, и my_item.user_profile
имели смысл.