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 имели смысл.

Вернуться на верх