gpt4 book ai didi

django - 模型的表单实例给出 id=None Django

转载 作者:行者123 更新时间:2023-12-04 15:14:44 25 4
gpt4 key购买 nike

我误会了什么!如果我的模型未保存,则它没有与之关联的 ID。所以如果我有这样的事情:
views.py (插入或编辑现有信息使用相同的模型形式)

def insert_or_modify(request, id=None):
if id is not None:
book = BookModel.objects.get(pk=id)
else:
book = BookModel()

if request.method == 'POST':
form = BookInfoForm(request.POST, request.FILES, instance=book)
if form.is_valid():
form.save()

....

return render_to_response(...)

我也有一个图像并使用 upload_to 作为图像字段。有两个问题:id 为 None,我不知道如何操作/保存 instance=book这样我才能真正得到一个 id。第二个问题是我保存数据的位置很远。即使模板标签 book.img.urlhttp:127.0.0.1:8000/folder1/media/id/ 上有书的所需位置,实际位置在其他地方:

我要将图像保存到的位置:
/project/folder1/media/id/

哪里 id是书号。

我实际得到的:
/project/id/      

(但 'id' 变成了 'None',因为它不存在!)

我以前的代码有效。它会保存到正确的位置,但是使用当前的代码,它不起作用。所以保存问题似乎不是由 settings.py 造成的,因为它以前工作过。

编辑:从代码格式化区域中删除非代码

编辑:我发现了为什么我没有保存到正确的位置。事实证明,我上次修改 settings.py 时忘记取消注释。保存到该位置现在有效!对不起大家!

编辑:我认为 id=None 问题是由 form.save() 引起的。如果我避免这样做并直接保存到模型,我就没有这个问题。

最佳答案

当您使用自动增量 id 字段(默认)时,Id 仅在保存对象时分配。
您可以在处理图像之前保存项目,然后保存图像。

可能您不必担心图像名称 - 因为 django 文件存储不会遇到相同图像名称的问题。所以如果你只保存文件“image.png”,然后保存另一个名为“image.png”的文件 - 那么它会被保存为“image_1.png”

def add_or_create(request, item_id=None):
item = get_object_or_404(BookModel, id=item_id) if item_id else None
form = BookInfoForm(request.POST or None, request.FILES or None, instance=book) # assume it is ModelForm

if form.is_valid():
book = form.save()

关于django - 模型的表单实例给出 id=None Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8528615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com