Возможность связать пользователя / профиль с ранее созданным именем, связанным с моделью через внешний ключ - PullRequest
0 голосов
/ 04 мая 2020

У меня есть приложение Django, в которое зарегистрированные пользователи могут добавлять через форму ввода подробную информацию о выступлениях своего музыкального ансамбля c. Это приложение также имеет раздел для композиторов, где они добавляют свои собственные композиции. Я использую пользовательскую модель пользователя с профилями, связанными с учетными записями пользователей:

class User(AbstractBaseUser):
email = models.EmailField(verbose_name="email", unique=True, max_length=255)
first_name = models.CharField(max_length=30, blank=True, null=True)
[...]

class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
[...]

Это моя модель композиции:

class Composition(models.Model):
    title       = models.CharField(max_length=120) # max_length = required
    composer = models.ForeignKey(
      settings.AUTH_USER_MODEL,
      on_delete=models.CASCADE
    )
[...]

А это моя модель производительности , Информация об исполнении ссылается на исполненную пьесу (performed):

class Performance(models.Model):
performed = models.ManyToManyField(Composition, blank=True)
[...]

Пока все хорошо. Теперь я хотел бы, чтобы исполнители могли добавлять произведения композиторов, которые еще не зарегистрированы на сайте. Допустим, исполнитель исполнил пьесу Джона Леннона и добавляет информацию об этом спектакле. Таким образом, исполнителю нужно будет добавить как Джона Леннона, так и его композицию, и связать их.

Самый важный момент: если призрак Джона Леннона завтра захочет зарегистрироваться на сайте, Администратор сайта должен иметь возможность легко связать композиции, уже добавленные исполнителями, с недавно созданной учетной записью Джона Леннона. Это возможно? Я полагаю, что ключом к решению этой проблемы является изменение composer = models.ForeignKey(settings.AUTH_USER_MODEL... на что-то другое, то есть с использованием промежуточной модели. Будем очень благодарны за любые предложения.

1 Ответ

0 голосов
/ 04 мая 2020

Есть разные способы сделать это, вы должны выбрать один из них на свой вкус:

  • Когда вы знаете, что фактический пользователь зарегистрирован, просто удалите старого, поддельного пользователя, указанного в композиции. и замените его фактическим пользователем.
  • Создайте новую модель с именем, например, Artist, и измените отношение composer для ссылки на модель Artist. затем свяжите модель Artist с реальным пользователем с помощью внешнего ключа, допускающего значение NULL.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...