【问题标题】:Django - forms vs model form, editing a model.textField, and getting the pk of an object?Django - 表单与模型表单,编辑 model.textField,并获取对象的 pk?
【发布时间】:2016-10-15 05:10:45
【问题描述】:

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”标题。我已经尝试查看文档,但似乎没有任何内容可以说明如何编辑它。

这让我想到了我的问题的另一部分,使用 forms.someField 与使用 models.someField 有什么区别,因为表单似乎有更多的自定义。我正在使用 MySQL 数据库,所以我想使用模型表单,但它令人沮丧的是不可定制的,我很想知道我是否遗漏了一些东西。

最后,我如何获取对象实例的 pk id。我们希望所有的 cmets 都由一个唯一的键记录,所以我想为什么不把它与它在 db 中的 pk 对应起来。除了无论我执行什么谷歌搜索,我都找不到返回 pk 的方法。我找到的最接近的是 instance.object_instance.pk 行不通的东西。

对此的任何指导都会很棒。在模型表单方面似乎缺少 Django 文档。

【问题讨论】:

    标签: python mysql django forms models


    【解决方案1】:

    你的问题涉及很多不同的东西,但我会尽力回答。

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

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

    您可以使用instance.pk 获取实例的主键。请注意,在您保存实例之前,您无法执行此操作。在您调用form.save(commit=False)时,该实例尚未保存到数据库中,因此它还没有主键。

    【讨论】:

      猜你喜欢
      • 2019-02-06
      • 2010-12-29
      • 2020-04-18
      • 2017-06-21
      • 1970-01-01
      • 2020-02-12
      • 2016-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多