Django - загрузка изображений с дополнительной информацией - PullRequest
0 голосов
/ 28 марта 2020

Допустим, у меня есть блог-сайт. И каждый блог состоит из изображений. Итак, я хочу отсортировать изображения в зависимости от того, к какому блогу они принадлежат. Но как при загрузке как автоматически передавать идентификатор блога с изображением?

Моя модель выглядит следующим образом:

class Blog(models.Model):
    name = models.CharField()
    blog = models.CharField()

class Photo(models.Model):
    blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
    file = models.FileField(upload_to=get_upload_path)

Мой forms.py выглядит так:

class PhotoForm(forms.ModelForm):
    class Meta:
        model = Photo
        fields = ('file', 'blog')

Вы видите в полях «блог». Как на самом деле передать идентификатор блога туда?

В настоящее время моя html страница для загрузки выглядит следующим образом:

<div style="margin-bottom: 20px;">
    <button type="button" class="btn btn-primary js-upload-photos">
     <input id="fileupload" type="file" name="file" multiple
                   style="display: none;"
                   data-url="{% url 'blog' blog.id %}"
                   data-form-data='{"csrfmiddlewaretoken": "{{ csrf_token }}"}'>
</div>

На самом деле этот способ загрузки изображений взят из эта замечательная статья Vitor Freitas

Теперь я хочу передать идентификатор блога в шаблон через views.py с контекстом, который я сделал. Но как мне сохранить это и передать его вместе с загружаемыми изображениями?

views.py выглядит так:

class BlogDetailView(View):

    def get(self, request,**kwargs):
        page = get_object_or_404(Page, pk=self.kwargs['pk'])
        context = {'page':page}

        return render(self.request, 'blog.html', context=context)


    def post(self, request, **kwargs):
        form = PhotoForm(self.request.POST, self.request.FILES)
        if form.is_valid():
            photo = form.save()
            data = {'is_valid': True, 'name': photo.file.name, 'url': photo.file.url}
        else:
            data = {'is_valid': False}
        return JsonResponse(data)

Так как мне связать изображение с блогом при загрузке?

Любая помощь будет высоко ценится.

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Хорошо, поэтому я решил свою проблему следующим образом:

Я сохранил форму такой, какая она есть. И в html я ничего не сделал для идентификатора блога. Вместо этого, в views.py я скопировал свой запрос на публикацию следующим образом:

    stuff = request.POST.copy()
    stuff['blog'] = blog.id

Затем я создал форму с такими "вещами", как это: form = PhotoForm(stuff, self.request.FILES)

И затем произвел проверку .

Таким образом, моя проблема была решена как чудо, так как теперь я передаю идентификатор блога с моей фотографией.

0 голосов
/ 28 марта 2020

Почему бы вам просто не передать файл в вашей форме следующим образом:

if form.is_valid():
    photo = form.save(commit=False)
    photo.file = request.FILES['file']
    photo.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...