2016-06-14 85 views
1

models.py

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) 

forms.py

class statusTab(ModelForm): 
    class Meta: 
     model = History 
     fields = ['logComments'] 

views.py

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”标题。我试过看文档,似乎没有任何提示如何编辑这个文件的任何迹象。Django - 窗体vs模型窗体,编辑model.textField,并获取对象的pk?

这导致我到我的问题的其他部分,使用forms.someFieldmodels.someField时有什么区别,因为窗体似乎有更多的定制。我正在使用一个MySQL数据库,所以我想使用模型表单,但它令人沮丧地不可定制,我很好奇,看看我是否错过了一些东西。

另外,最后,如何获得对象实例的PK ID。我们希望所有的注释都被一个唯一的关键字记录下来,所以我想了解为什么不把它与db中的pk相对应。除了无论我执行什么谷歌搜索,我找不到方法来返回pk。我发现最接近的是沿着instance.object_instance.pk的行,这是行不通的。

对此的任何指导都会很好。 Django文档在模型表单时似乎缺乏。

回答

1

你的问题涉及很多不同的事情,但我会尽力回答他们。

请参阅rendering form fields manually上的文档。如果您不想显示标签,请将其保留。

在表格中,您应始终使用表格字段(例如forms.CharField)而不是模型字段(例如models.CharField)。模型表单也是如此。定义模型类时应使用模型字段。

您可以使用instance.pk获取实例的主键。请注意,直到保存实例后,才能执行此操作。在您拨打电话form.save(commit=False)时,该实例尚未保存到数据库中,因此它还没有主键。