Django: создание связанных таблиц с использованием внешних ключей

#database #django #sqlite #foreign-keys #primary-key

#База данных #django #sqlite #внешние ключи #первичный ключ

Вопрос:

В моей базе данных SQLite есть 3 таблицы: пользователь, учетные записи, пароли. Идентификатор учетных записей и паролей является внешним ключом для User.id . Проблема в том, что экземпляр User не имеет идентификатора, пока он не будет сохранен (и django добавляет основное поле). Вот как я пытаюсь это сделать, поскольку User.email должен быть уникальным, тогда я должен вернуть только один объект, но он не работает. Я уверен, что есть лучший способ сделать это.

tl; dr Когда я создаю пользователя, я также хочу, чтобы для них была создана таблица учетных записей и паролей, связанная с помощью внешнего ключа id, который также является основным ключом.

 def adduser(request):
    u = User(email=request.POST['email'], username=request.POST['username'], password=request.POST['password'])
    a = Accounts()
    u.save()
    u = User.objects.get(email=request.POST['email'])
    a.id = u.id
    a.save()
  

Ответ №1:

Это намного ближе к тому, что вы хотите.

 def adduser(request):
    u = User(email=request.POST['email'], username=request.POST['username'], password=request.POST['password'])
    u.save()
    a = Accounts(
        user=u
    )
    a.save()
  
  1. Используете ли вы пользовательскую модель django?

если это так, вы действительно хотите этого:

 def adduser(request):
    u = User(email=request.POST['email'], username=request.POST['username'])
    u.set_password(request.POST['password'])
    u.save()
    a = Accounts(
        user=u
    )
    a.save()
  

Кроме того, вместо использования запроса.РАЗМЕЩАЙТЕ переменные везде, рассматривали ли вы возможность использования форм django и утилит form? Они довольно хороши.

Комментарии:

1. Кажется, это только 1.3, и у меня была куча проблем с 1.3, поэтому теперь я использую 1.2.7: (

2. В ответе Issac ничего нет только для 1.3.