【问题标题】:How do I get the ID of an image如何获取图像的 ID
【发布时间】:2020-07-08 04:10:27
【问题描述】:

我是 Django 初学者,如何获取表单上传的每张图片的 ID?

class Image(models.Model):
    imageuploader_profile=models.ForeignKey(settings.AUTH_USER_MODEL)
    upload_image=models.ImageField() 

def upload(request):
    if request.method == 'POST':
        form=UploadForm(request.POST, request.FILES)
        if form.is_valid():
            post=form.save(commit=False)
            post.imageuploader_profile=request.user
            post.save()
            return redirect.... 
    else:
        form=UploadForm
    return render...... 

view.py

def home(request) :
    all_images=Image objects.filter(imageuploader_profile=request.user) 
    context={'all_images':all_images} 
    return render(request, 'home.html', context) 

我的家.html

{% for post in all_images %}
{% if post upload_images %}
<img src="{{ post upload_image.url }}"> 
{% endif %}
{% endfor%} 

我想获取模板中的所有 ID。

【问题讨论】:

  • 所以你想要Image.objects.filter(uploaded_via='form')这样的东西?然后你需要存储图像被保存/创建的信息。如果您只想获取所有图像(因为您只按表单保存它们),那么您可以使用images = Image.objects.all()
  • @zypro... 你能用我的问题中的表格更新你的答案吗?我似乎对如何获取通过表单上传的每张图片的 ID 感到困惑。你从哪里得到“uploaded_via”?
  • 问题是,您在哪里需要所有图像?你想用这个查询集做什么?然后我可以更新你的代码。还是只需要当前上传的图片ID?
  • @zypro... 我想上传一张将显示在主页上的图片,我可以做到。但我现在想要的是获取我使用表单上传的每张图片的 ID。
  • 您还不清楚,请准确说明您想要什么所需的输出,例如(我想要用户在我的模板中上传的每个图像 ID 的列表)

标签: python django


【解决方案1】:

您可以编写一个新方法/视图来获取所有 ID:

def get_images_ids():
    images_ids = Image.objects.values_list('id)
    print(images_ids)
    return images_ids

Here the explanation 代表values_list(如果需要更多,也可以使用values(),或属性flat=True)。

如果您调用get_images_ids(),您将获得查询集中(或带有flat=True 的列表)中所有图像的所有ID。如果您需要过滤它们,请使用.filter()

在你的views.py中

def home(request) :
    all_images=Image objects.filter(imageuploader_profile=request.user) 
    context={'all_images':all_images, all_images_ids: get_images_ids()} 
    return render(request, 'home.html', context) 

在您的模板中执行以下操作:

{% for post in all_images %}
    {% if post upload_images %}
        <img src="{{ post.upload_image.url }}">
        <span>{{ post.id }}</span>
    {% endif %}
{% endfor%}

<ul>
{% for id in all_images_ids %}
    <li>{{ id }}</li>
{% endfor%}
</ul>

【讨论】:

  • 如何打印出 ID,以便在控制台中看到?而且我也会在模板中传递这个。我会更新我的问题,以便您清楚。
  • 调用get_images_ids() 并打印其输出。 print(get_images_ids())。要将其传递到模板中,您可以将其定义为模板标签,或者将其添加为所需的视图作为上下文值。
  • 您想以何种方式以及在何处打印 id?
  • 我想在控制台打印出ID,这样上传图片时就可以看到自己了。以及如何在模板中传递 get_images_ids?在我的问题中编辑我的模板代码,以便我理解。
  • @GistDomBlog 只是问,将get_images_ids() 传递给模板的目的是什么? `post.id 方法要好得多,您甚至不需要创建该函数。
【解决方案2】:

除非先在数据库中创建对象,否则无法获取图像的 id,换句话说,您必须先执行post.save(),然后才能运行post.id 来获取id。这是您的代码示例。

class Image(models.Model):
    imageuploader_profile=models.ForeignKey(settings.AUTH_USER_MODEL)
    upload_image=models.ImageField() 

def upload(request):
    if request.method == 'POST':
        form=UploadForm(request.POST, request.FILES)
        if form.is_valid():
            post=form.save(commit=False)
            post.imageuploader_profile=request.user
            post.save()
            print(post.id)  # This will print id of submitted post in your console 

            return redirect.... 
    else:
        form=UploadForm

注意:运行post.save()后,帖子的ID会自动在数据库中创建

【讨论】:

  • @Hisham ...你是对的,但这不是我真正想要的。感谢您的知识
【解决方案3】:

post.save()执行后可以得到图片的ID。

所以在return语句之前你可以访问post.id或者post.pk来获取图片ID。

更新:

class Image(models.Model):
    imageuploader_profile=models.ForeignKey(settings.AUTH_USER_MODEL)
    upload_image=models.ImageField() 

def upload(request):
    if request.method == 'POST':
        form=UploadForm(request.POST, request.FILES)
        if form.is_valid():
            post=form.save(commit=False)
            post.imageuploader_profile=request.user
            post.save()

            # here you can access post.id or post.pk

            return redirect.... 
    else:
        form=UploadForm

如果你想获取所有上传的图片 id 然后使用Image.objects.values_list('id)

【讨论】:

  • 抱歉,我不明白如何将您的代码添加到表单中,您能用我的表单更新您的代码吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-08
  • 1970-01-01
  • 2019-07-14
  • 2011-04-22
  • 2016-10-14
  • 2015-01-16
  • 1970-01-01
相关资源
最近更新 更多