如何将多个图像添加到django

时间:2016-10-24 12:10:51

标签: django django-models django-forms django-templates django-views

我是django的新手。我正在尝试将多个图像添加到django模板,如博客文章。我不知道怎么做。请帮帮我。

我没有得到如何在单个图像区域中保存图像 以及如何上传多个图片

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    phone_no = models.CharField(max_length=10, null=True)
    shop_name = models.CharField(max_length=244, null=True)
    shop_address = models.CharField(max_length=200,null=True)
    city = models.CharField(max_length=20, null=True)
    country = models.CharField(max_length=20, null=True)
    abn = models.CharField(max_length=11)
    website = models.CharField(max_length=200, blank=True, null=True)
    created_at = models.DateTimeField(default=datetime.now, blank=True)
    updated_at = models.DateTimeField(default=datetime.now, blank=True)
    Emg_no = models.CharField(max_length=10, null=True,blank=True)
    payment_date = models.DateTimeField(default=datetime.now, blank=True)
    area_code = models.CharField(null=True, blank=True, max_length=2)
    landline_number =  models.CharField(null=True, blank=True, max_length=9)
    status = models.ForeignKey(Status, blank=True, null=True)
    user_image = models.ImageField(upload_to='user_image')

    def __str__(self):
        return self.user.first_name

    class Meta:
        db_table = 'registration_userprofile'

2 个答案:

答案 0 :(得分:2)

让我们假设你想要一张与一个Userprofile相关的图片,让用户一次在你的视图中上传多张图片。在您的models.py中添加:

class Image(models.Model):
   user = models.Foreignkey(UserProfile)
   image = models.ImageField(upload_to='user_images')

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

<form action="/pic_upload/{{request.user.id}}/" method="post" enctype="multipart/form-data"> 
    {% csrf_token %} 
    <table>
      <tr>
        <td>Select Pictures: </td><td><input name="files" type="file" size="50" accept="image/*" multiple>  </td>
        <td><button type="submit"> Upload </button> </td>
       </tr>
    </table>
</form>

(请注意,我上面使用的表格结构只是一个例子。)

然后您需要创建保存图像的视图,因此在views.py中添加:

  from django.contrib.auth.decorators import login_required
  from django.shortcuts import redirect


  @login_required
  def pic_upload(request,user_id):
        user = UserProfile.objects.get(user__id=user_id)
        for afile in request.FILES.getlist('files'):
            pic = Picture()
            pic.user= user 
            pic.image = afile
            pic.save()

        return redirect("path_to_where_you_want_to_go_after_upload")

这只是图片上传的视图 - 您还需要一个显示模板的视图。

(请注意,这仅在用户登录并激活请求上下文处理器时才有效。如果您不需要登录用户,您可以为用户创建一个选择框并添加逻辑。)

然后你需要在urls.py中挂起这些东西:

url(r'^pic_upload/(?P<user_id>\d+)/$', pic_upload, name='pic_upload'),

答案 1 :(得分:1)

您可以在User模型中创建另一个Image模型并为其指定Foreignkey Relationship。如下所示:

class Image(models.Model):
    *image related fields*

class User(models.Model):
    *user fields*        
    image = models.Foreignkey(Image)

请阅读有关django多对多字段和一对一字段的信息。Django Model relationship document.