from django.db import models
from django import forms
class History(models.Model):
commentTypes = (
('1', 'issues'),
('2', 'risks'),
('3', 'dependencies'),
('4', 'accomplishments'),
('6', 'UGM')
)
historyID = models.IntegerField()
projectID = models.IntegerField()
userID = models.CharField(max_length=6)
logComments = models.TextField(max_length=1000)
timeStamp = models.DateTimeField(auto_now_add=True, auto_now=False)
commentType = models.CharField(max_length=1,choices=commentTypes)
class statusTab(ModelForm):
class Meta:
model = History
fields = ['logComments']
def projectTabs(request):
form = statusTab(request.POST or None)
context = {
"form":statusTab,
}
if request.method == 'POST' and form.is_valid():
instance = form.save(commit=False)
#instance.historyID = instance.object_instance.pk
instance.projectID = 1337
instance.userID = request.user
# instance.commentType
instance.save()
return render(request, "projects/project.html", context)
所以我的问题是,我希望能够创建一个文本框供用户输入有关项目的信息。除非我使用models.textField
,否则它会继续logComments: *textbox*
,我不想要“logComments”标题。我已经尝试查看文档,但似乎没有任何内容可以指示如何编辑它。
这引出了我的问题的另一部分,使用forms.someField
而不是models.someField
有什么不同,因为表单似乎有更多的自定义。我正在使用MySQL数据库,所以我想使用模型表格,但令人沮丧的是不可定制的,我很想知道我是否遗漏了一些东西。
另外,最后,我如何获取对象实例的pk id。我们希望通过唯一键记录所有注释,因此我想到为什么不将它与db中的pk对应。除了我执行的google搜索,我找不到返回pk的方法。我发现的最接近的是instance.object_instance.pk的行,它不起作用。
任何关于此的指导都会很棒。在模型表单方面,Django文档似乎缺乏。
答案 0 :(得分:1)
你的问题涉及很多不同的事情,但我会尝试回答它们。
请参阅rendering form fields manually上的文档。如果您不想显示标签,请将其保留。
在表单中,您应始终使用表单字段(例如forms.CharField
)而不是模型字段(例如models.CharField
)。对于模型形式也是如此。定义模型类时应使用模型字段。
您可以使用instance.pk
获取实例的主键。请注意,在 保存实例之后,您才能执行此操作。在您调用form.save(commit=False)
时,实例尚未保存到数据库中,因此它还没有主键。