Python 如何在表单中获取或更新?
我想做什么: 我试图在保存表单时更新视图中的LogDone对象 logdone之前已经创建过,我想使用之前创建和更新的logdone的id,而不是创建一个新的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_
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,_=…
来获取第一个元素(并丢弃指定是否创建/更新对象的布尔值)。确实,做得很好,谢谢您,我将为这个问题添加很多好的建议和提示!