Django - Как добавить дополнительные поля в модель User?

Мне нужно добавить новые поля в "реальную модель Django User". Почему? Потому что у меня есть две формы в моем шаблоне с методами post на двух разных страницах.

И я создал две модели, каждая из которых сохраняет данные соответствующей формы в базе данных.

В моих представлениях мне пришлось написать две разные функции для страниц форм.

1-й: когда есть пост запрос, он сохраняет данные в 1-й Модели.

Вторая: Делает то же самое, что и 1-й, но сохраняет данные в 2-й модели .

Я пытался создать еще одну новую модель model3, которая содержит поля model1 + model2 (не удалял предыдущие модели)! Но когда я отправляю 1-ю форму, она сохраняет данные в объекте, а когда я отправляю 2-ю форму, данные сохраняются в другом новом объекте model3 !

Так что я отменил этот метод и теперь я должен попробовать другой способ сделать задачу, Итак, я сохранил данные 1-ой формы (которые являются информацией для входа (email, pass) и когда пользователь отправляет форму, она создает нового пользователя с

user = User.objects.create_user(request.POST.get("email"),request.POST.get("email"),password)

Это сработало отлично, и теперь я могу изменять учетные данные в представлениях только user.username = newemail и user.password = newpassword... но я не смог сделать это со второй формой, потому что модель User имеет не так много полей, как Model2! И также, когда я пробую это с

data = Model3(fielname = request.POST.get("addressLineForExample")
data.save()

выдает ошибку, говоря, что я не указал, для какого идентификатора пользователя я собираюсь сохранить его!

Я видел видео и документацию о методе OneToOneField! Потом я понял, что он просто показывает поля model3 на странице пользователя в 127.0.0.1:8000/admin, а не добавляет реальные поля в User Model!

Мне пришла идея изменить user.newaddedfield = любое поле Model3! Я просто хочу реализовать это таким образом!

Надеюсь, вы поняли, что я написал... Я не мог выложить картинки или код, потому что там есть лишний не нужный код, поэтому я постарался сделать это как можно понятнее!

Я очень ценю тех, кто хотя бы пытается помочь. И Заранее спасибо.

Вы можете расширить модель Django AbstractUser, чтобы создать свою собственную пользовательскую модель пользователя поверх модели Django User. Например:

Файл: project/user/models.py

from django.db import models
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    custom_field = models.BooleanField(default=False)

Затем необходимо выполнить

python manage.py makemigrations
python manage.py migrate

в вашем терминале для создания связанной модели в базе данных.

Чтобы увидеть эту модель на странице администратора, зарегистрируйте модель с помощью следующего фрагмента:

Файл: project/user/admin.py

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User

admin.site.register(User, UserAdmin)
  • P.S. Я настоятельно рекомендую добавить AUTH_USER_MODEL = "user.User" к project/project/settings.py для того, чтобы иметь возможность полностью использовать стандартные пользовательские функции Django (включая интеграцию аутентификации Django Rest Framework).

    .
  • P.S. Убедитесь, что имя приложения указано в INSTALLED_APPS в вашем settings.py

    .

Решение:

Я вернулся назад с созданием другой новой модели3, которая содержит поля модели1 + модели2

Затем, когда я отправляю первую форму, я делаю:

data = Model3(field1 = request.POST.get("ValueOfThe1stFormField1")
data.save()

Теперь модем Model3 будет заполнен данными первой формы, но еще не заполнен данными второй.

Во второй функции, где пользователь должен отправить данные во второй форме, я делаю обновление связанного объекта model3 следующим образом:

Model3.objects.filter(field1=field1OfThe1stForm).update(field2=anything, field3=anything,...)

Надеюсь, это поможет всем, кто пытается объединить две (или более) модели в одну другую модель, которая должна содержать все поля предыдущей модели.

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