如何获取图像的ID

时间:2020-03-27 12:07:44

标签: python django

我是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) 

我的home.html

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

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

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

除非首先在数据库中创建一个对象,否则您将无法获得图像的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会自动在数据库中创建

答案 2 :(得分:0)

执行post.save()后,您可以获取图像的ID。

因此,在return语句之前,您可以访问post.idpost.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)