用户应该能够将活动登录到activity_log模型中,但CreateView表单必须自动填写当前登录用户的user_id。
我已将OnetoOne关系上的djangoauth_user表扩展到另一个名为Profile(users-profile)的模型中。user_id是自动添加到我的Profile模型中的ForeignKey字段(我可以在MySQL WorkBench中看到它),并且是auth_user模型中的PrimaryKey。
然而,尽管在LogCreateView中使用了def form_valid(self,form)覆盖,我还是得到了一个IntegrityError(1048:'user_id'不能为'null')。我已经尝试了StackOverflow示例中的form_valid()的几种变体,但没有效果。
我的POST变量都是其他字段的正确输入,这些字段都是从表单中正确获取的,即“projectrowid”、“activityid”、“startdatetime”、“enddatetime”和“comments”,但用户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 -活动日志模型
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)
用户\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'
Profile
模型的外键是Activity_Log.staffrowid
。
这意味着如果您使用模型实例,您应该设置form.instance.staffrowid
,如果您使用id,则应该设置form.instance.staffrowid_id
。
form.instance.staffrowid = self.request.user.profile
请注意,staffrowid
是Profile
,因此我使用了self.request.user。配置文件
而不是self.request.user
。您可能需要代码来处理用户不存在配置文件的情况。
我正在编写一个独立的java应用程序,从Maven项目构建它并通过调用jar文件执行。 在应用程序中,我有一个实体管理器,它使用在我的持久性中定义的持久性单元。xml是独立的(事务类型=“RESOURCE\u LOCAL”) 实际的实体注释类来自另一个项目,因此被添加到pom中。xml文件作为依赖项。 问题是持久性。包含实体类的项目的xml覆盖了实际独立应用程序的持久性。构建jar时,jar目标文
问题内容: 我正在拔头发试图找出我做错了什么。该表非常简单: 如您所见,我创建了一个覆盖该表的所有三列的覆盖索引,并在上添加了一个潜在索引的附加索引。这是一对多链接表,每个链接表都映射到一个或多个链接表。该表包含6500万行。 所以,这就是问题所在。假设我想知道有多少人的icd代码为“ 25000”。[如果您想知道的话,那就是糖尿病]。我写了一个查询,看起来像这样: 这需要60秒钟以上的时间才能执
我试图读取一个CSV文件,然后根据该CSV文件创建一个新的对象。我可以用SuperCSV库成功地做到这一点,但是如果发生错误(例如特定的单元格为null),它会抛出一个错误(如预期的那样)。我试图在ArrayList中收集所有错误,但现在第一个异常时一切都会停止。如何使SuperCSV CsvBeanReader继续到下一行,即使处理器出现错误?我在try/catch块中有循环条件。代码如下:
我刚刚开始开发一个Django博客,并遵循这个youtube教程-https://www.youtube.com/watch?v=7rgph8en0Jc 我正在使用Django 1.6.6。 每次我试图在管理中添加条目,我都会得到这个错误。谢谢你的帮助! 环境: Django版本:1.6.6 Python版本:2.7.8安装的应用程序:('Django.contrib.admin','Django
问题内容: 我有一个抽象类,应该实现一个公共字段,该字段是一个接口或另一个抽象类。 像这样的东西: 现在我有另一个专门的类容器: Java的让我编译这个,和我想象的领域中被自动重载领域的......这些问题是:我是对这个?孩子的自动“超载”会发生吗? 而且,更重要的问题是,如果我还有另一个这样的课: 会返回1还是2?我的意思是容器字段将称为通用字段还是特殊字段?还有,如果特殊的prop1被声明为S
问题内容: 我正在使用Cobertura进行代码覆盖率分析。如果我在詹金斯(Jenkins)中运行构建,则覆盖范围结果中将包含其中的类,但覆盖率为 0% 。如果我在工作区(Eclipse)中运行代码覆盖率,则覆盖率会更高。包装的覆盖范围还可以。我错过了一些配置吗? 我的项目结构如下: 我的cobertura配置在POM文件中: 问题答案: 生成的代码不应进行测试,并且不应在代码覆盖率指标中使用。原