@slavamironoff

Как убрать переопределение имени поля таблицы?

Добрый день.
Расширяю модель User, добавляя новые поля.
from django.db import models
from django.contrib.auth.models import User

#models.py
class Personal(models.Model):
    user = models.OneToOneField(User, on_delete = models.PROTECT)
    middle_name = models.CharField(name='middle_name', verbose_name="Отчество", max_length=255)
    user_adress = models.CharField(name='user_adress', verbose_name="Адресс", max_length=255)
    user_position = models.CharField(name='user_position', verbose_name="Должность", max_length=255)


# forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
from .models import Personal
from django.contrib.auth.models import User


class SaveFields(UserCreationForm):
    middle_name = forms.CharField(max_length=255)
    user_adress = forms.CharField(max_length=255)
    user_position = forms.CharField(max_length=255)

    class Meta:
        model=User
        fields=('middle_name', 'user_adress', 'user_position' )


# views.py
def index_add(request):
    # Регистрация
    if request.method == 'POST':
        print(request.POST)
        form = SaveFields(request.POST)
        if request.POST:
            if form.is_valid():
                form.save()
    return render(request, template_name = 'account/signup.html', context={
        'title': 'Сотрудники',
        'form': form
    })


Проблема в том что данные не доходят до полей которые добавил.
Заметил что в админке имя инпута изменено на name="personal-0-middle_name", когда должно быть name="middle_name"
Как переопределить имя инпута? так как думаю что проблема связана как раз с этим?
  • Вопрос задан
  • 46 просмотров
Пригласить эксперта
Ответы на вопрос 1
@buslay
Из документации:
These profile models are not special in any way - they are just Django models that happen to have a one-to-one link with a user model. As such, they aren’t auto created when a user is created, but a django.db.models.signals.post_save could be used to create or update related models as appropriate.


Это как раз из примера "расширения" стандартной модели пользователя.. дословно - объекты связанные с User через OneToOneField не создаются в момент создания пользователя, но у вас есть возможность сделать это через Сигналы.

У вас еще есть вариант "переопределить" стандартную модель пользователя, и тогда нужные поля будут сразу в User. Например:
class AuthUser(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(u'Электронная почта', unique=True)
    date_add = models.DateTimeField(u'Дата добавлен', auto_now_add=True)
    is_active = models.BooleanField(u'активен', default=True)
    employee = models.OneToOneField('person.Employies', null=True, blank=True, editable=True, verbose_name='Профиль сотрудника', on_delete=models.PROTECT)
    is_staff = models.BooleanField(u'администратор', default=False
                                   , help_text=u'определяет возможность входа в панель управления')
    roles = models.ManyToManyField(AuthUserRoles, verbose_name=u'Роли')
    objects = AuthUserManager()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы