Внешние ключи Django: settings.AUTH_USER_MODEL продолжает давать null для form.save

Прочитал статьи и попробовал реализовать в моделях.

user = models.ForeignKey(settings.AUTH_USER_MODEL) 

но всякий раз, когда я пытаюсь сохранить форму для пользователя, указывается, что значение не может быть нулевым. Я предполагаю, потому что он не передает / не забирает AUTH_USER

Например:

class Degree(models.Model):

    user = models.ForeignKey(settings.AUTH_USER_MODEL)

    degreeLevel = models.CharField(max_length = 50)

     areaOfStudy = models.CharField(max_length = 50)

У меня такое ощущение, что при создании пользователя мне нужно создать сигнал для всех моделей, которые используют user = models.ForeignKey (settings.AUTH_USER_MODEL), но я изо всех сил пытаюсь найти ресурс, который занимается этой проблемой от начала до конца, поэтому я не уверен где я ошибаюсь.

Любая помощь была бы замечательной ...

Этот вопрос касается profiles_details.id не существует Django

Спасибо.

Я пытался :

user = models.ForeignKey (settings.AUTH_USER_MODEL, null = False, on_delete = models.CASCADE, verbose_name = _ (u "User")) Но появилось сообщение об ошибке при выполнении миграции:

 NameError: name '_' is not defined

если я возьму подробное имя и попытаюсь выполнить миграцию, я получу: эту ошибку:

Вы пытаетесь добавить к деталям поле «пользователь», не допускающее значения NULL, без значения по умолчанию; мы не можем этого сделать (базе данных нужно что-то для заполнения существующих строк). Выберите исправление: 1) Задайте одноразовое значение по умолчанию сейчас (будет установлено для всех существующих строк) 2) Закройте и позвольте мне добавить значение по умолчанию в models.py

Также просмотрел https://docs.djangoproject.com/en/dev/topics/auth/customizing/#referencing-the-user-model

Но не понимал, что делать с:

 django.contrib.auth.get_user_model().

person red8alice    schedule 27.10.2015    source источник
comment
Вы действительно установили какое-либо значение пользователя при создании новой степени?   -  person Daniel Roseman    schedule 27.10.2015
comment
нет, я не знал, я не уверен, как это сделать, я предположил, что django получит пользователя входа / регистрации и заполнит это пространство настройками. AUTH_USER_MODEL), поскольку учебник действительно не углубляется в это ... Если бы вы могли указать мне на один или объясни, что было бы здорово   -  person red8alice    schedule 27.10.2015


Ответы (1)


Я вижу несколько деталей, на которые следует обратить внимание в вашем вопросе:

  1. Если вы хотите, чтобы поле user не было обязательным, вам следует изменить его на:

     user = models.ForeignKey (..., null=True,...)
    
  2. Если вы хотите решить проблему с _ не распознаванием, вы должны добавить следующий импорт поверх своего файла:

      from django.utils.translation import ugettext as _
    
  3. Если вы хотите заполнить поле user в представлении, вы можете сделать это следующим образом:

     from django.views.generic import View
    
     class MyView(View):
         ...
    
         def get(request, *args, **kwargs):
    
             myobject = Degree.objects.get(...) # do some query 
             myobject.user = request.user
             myobject.save()
    
             return ...
    

    предполагая, что ваше представление обрабатывает запрос на получение и хочет назначить текущего пользователя объекту user.

  4. о том, как использовать: django.contrib.auth.get_user_model вот пример

    from django.contrib.auth import get_user_model
    
    ...
    
    
    def create_user(username, first_name, last_name, *args, **kwargs):
    
        user_class = get_user_model()
        new_user = user_class.objects.create(username=username,
            first_name=first_name, last_name=last_name)
    

    в основном функция get_user_model возвращает вам класс, который вы настроили в settings.AUTH_USER_MODEL. из него вы можете получить доступ, например, к его менеджерам (например, objects) и запросить или создать новые экземпляры.

person FSp    schedule 28.10.2015
comment
Спасибо большое, что пригодились ... :) - person red8alice; 29.10.2015