Пользователь должен иметь возможность регистрировать активность в модели Activity_Log, но форма CreateView должна автоматически заполнять user_id от текущего вошедшего в систему пользователя.
Я расширил таблицу django auth_user для отношений OnetoOne в другую модель с именем Profile ( users-profile ). user_id - это поле ForeignKey, автоматически добавляемое в мою модель профиля (я вижу его в MySQL WorkBench), и это PrimaryKey в модели auth_user.
Однако я получаю IntegrityError (1048: 'user_id' не может быть 'null'), несмотря на использование def form_valid (self, form) переопределение в LogCreateView. I пробовал несколько вариантов form_valid () из примеров StackOverflow, но безрезультатно.
Все мои POST-переменные являются правильными входными данными для других полей, правильно взятых из формы, например 'projectrowid', 'activityid', 'startdatetime', 'enddatetime', 'comments' , но user_id не передается вместе с переменными POST в модель Activity_Log.
Любой совет о том, как правильно переопределить def form_valid (), будет очень полезен!
views.py - LogCreateView
class LogCreateView(LoginRequiredMixin, CreateView):
model = Activity_Log
fields = ['projectrowid', 'activityid', 'startdatetime', 'enddatetime', 'comments']
def get_template_names(self):
if self.request.user.is_superuser:
template_name = 'Administrator/activity_log_form.html'
return template_name
else:
template_name = 'Staff/activity_log_form.html'
return template_name
def form_valid(self, form):
form.instance.user_id = self.request.user.id
return super(LogCreateView, self).form_valid(form)
models.py - модель ActivityLog
class Activity_Log(models.Model):
logentryid = models.AutoField(db_column='logEntryID', primary_key=True)
activityid = models.ForeignKey('Activity_Type', models.DO_NOTHING, db_column='activityID', verbose_name= _('Activity ID'))
projectrowid = models.ForeignKey('Project', models.DO_NOTHING, db_column='projectRowID',verbose_name= _('Project Name'))
staffrowid = models.ForeignKey('users.Profile', on_delete=models.CASCADE, db_column='user_id',
verbose_name=_('Staff Alias'))
startdatetime = models.DateTimeField(db_column='startDateTime', default=datetime.datetime.now(), verbose_name= _('Activity Start (Date and Time: yyyy-mm-dd hh:mm:ss)'))
enddatetime = models.DateTimeField(db_column='endDateTime', default=datetime.datetime.now(), verbose_name= _('Activity End (Date and Time: yyyy-mm-dd hh:mm:ss)'))
comments = models.CharField(max_length=150)
users \ models.py - Модель профиля
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
stafftypeid = models.ForeignKey('Administrator.Staff_Type', models.DO_NOTHING, db_column='staffTypeID')
employeeid = models.CharField(max_length=20)
alias = models.CharField(max_length=20)
department = models.CharField(max_length=150)
organization = models.CharField(max_length=150)
fte = models.DecimalField(max_digits=4, decimal_places=1, default=Decimal(100.0))
class Meta:
unique_together = [('alias',), ('employeeid',)]
db_table = 'users-profile'