Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在表单中获取或更新?_Python_Python 3.x_Django_Django Models_Django Views - Fatal编程技术网

Python 如何在表单中获取或更新?

Python 如何在表单中获取或更新?,python,python-3.x,django,django-models,django-views,Python,Python 3.x,Django,Django Models,Django Views,我想做什么: 我试图在保存表单时更新视图中的LogDone对象 logdone之前已经创建过,我想使用之前创建和更新的logdone的id,而不是创建一个新的 def create_logdone(request, logmessage_id, log_id, token ): log = get_object_or_404(LogBook, pk=log_id) logmessages = get_object_or_404(LogMessage, pk=logmessage_

我想做什么: 我试图在保存表单时更新视图中的LogDone对象

logdone之前已经创建过,我想使用之前创建和更新的logdone的id,而不是创建一个新的

def create_logdone(request, logmessage_id, log_id, token ):
    log = get_object_or_404(LogBook, pk=log_id)
    logmessages = get_object_or_404(LogMessage, pk=logmessage_id, logbook=log)
    logdone = LogDone.objects.update_or_create(logmessage=logmessages)
    form = CreateLogDone(request.POST)
    if request.method == "POST":
        if form.is_valid():
            instance = form.save(commit=False)
            instance.done_by = request.user
            instance.logmessage = logdone
            instance.save()
我得到的错误

“LogDone.logmessage”必须是“logmessage”实例


将其作为实例传递给
CreateLogDone
表单:

def create_logdone(request, logmessage_id, log_id, token ):
    log = get_object_or_404(LogBook, pk=log_id)
    logmessage = get_object_or_404(LogMessage, pk=logmessage_id, logbook=log)
    logdone, __ = LogDone.objects.update_or_create(logmessage=logmessage)
    form = CreateLogDone(request.POST, instance=logdone)
    if request.method == "POST":
        if form.is_valid():
            form.instance.done_by = request.user
            form.save()
            # …
    # …
def create_logdone(请求、日志消息、日志id、令牌):
日志=获取对象或404(日志,pk=日志id)
logmessage=get_object_或_404(logmessage,pk=logmessage_id,logbook=log)
logdone,_u=logdone.objects.update_或_create(logmessage=logmessage)
form=CreateLogDone(request.POST,instance=logdone)
如果request.method==“POST”:
如果form.is_有效():
form.instance.done_by=request.user
form.save()
# …
#…

注意:通常
表单
模型表单
…表单
后缀结尾, 为了避免与模型名称发生冲突,并明确我们 使用表单。因此,最好使用
CreateLogDoneForm
而不是
CreateLogDone


instance.logmessage=logdone
可能没有多大意义?这不应该是
instance.logmessage=logmessages
?代码中出现另一个错误
“tuple”对象没有属性“\u meta”
,谢谢您的帮助time@Mcflan_g:代码中有以逗号结尾的行吗?没有,错误来自instance=logdone,但我不知道why@Mcflan_g:因为
更新或创建(…)
返回一个2元组。您可以编写
logdone,_=…
来获取第一个元素(并丢弃指定是否创建/更新对象的布尔值)。确实,做得很好,谢谢您,我将为这个问题添加很多好的建议和提示!