Django - 当时上传几张图片

时间:2016-05-17 17:48:24

标签: django

我在这个问题上需要你的帮助:

这是我的models.py:

class Location(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
    name = models.CharField(max_length=100, verbose_name="Локация", default=u'')
    photos = models.ImageField(upload_to='photos', null=True)

这是我的forms.py:

class LocationForm(forms.ModelForm):

    class Meta:
        model = Location
        fields = ['name', 'photos']

这是我的views.py:

class AddLocationPageView(FormView):
    template_name = 'add_location.html'
    form_class = LocationForm

    def form_valid(self, form):
        form.save()
        return super(AddLocationPageView, self).form_valid(form)

我需要有可能在上传几张照片。 我怎样才能做到这一点? 谢谢!

1 个答案:

答案 0 :(得分:1)

由于我假设您使用的是关系数据库且模型字段名称为“照片”,因此每个位置都需要多张照片。

您可以执行以下操作:

class Image(models.Model):
    full_size = models.ImageField()
    thumbnail = models.ImageField()
    location = models.ForeignKey('app_label.Location', related_name='photos')

并从位置模型中删除图像字段。

要上传多张照片,您需要使用formset。根据您想要的界面,您可能希望使用model formset,以便照片正确设置其location_id。

使用表单,您需要做的就是使用您可以在视图中调用的formset_factory函数(可能在get_context_data中)。

在视图中处理formset涉及一些逻辑争论,但是有一个名为django-extra-views的项目,它再次使用formset逻辑实现表单,具体取决于你要在这里使用的接口。

如果您只想将照片添加到预先存在的位置,那就更简单了:只需将model_formset包含在一个位置对象中即可。