Как создать несколько изображений для загрузки в Django CreateView? - PullRequest
0 голосов
/ 26 января 2020

У меня есть проект django, и я создал в этом проекте операцию публикации, поэтому пользователь сможет делиться несколькими публикациями с фотографиями. Но у меня есть проблема. Я не могу написать функцию загрузки нескольких изображений. Я посмотрел много контента, но он не работает. Либо он сообщает о проблеме, либо контекст не отправляется на нужную мне страницу html. Пожалуйста, помогите мне. Функция мультикартинки, которую я хочу, должна быть под CreateView и должна быть помещена в тот же шаблон, что и она. Кроме того, должно быть 4 кнопки загрузки изображений, а последней должна быть назначена несколько функций (тегу html)

models.py:

class Photo(models.Model):
post= models.ForeignKey(Person, on_delete=models.CASCADE)

image = models.ImageField(upload_to=get_image_filename)
uploaded_at = models.DateTimeField(auto_now_add=True)

views.py:

class PersonCreateView(CreateView):
model = Person
form_class = PersonForm
success_url = reverse_lazy('person_changelist')

forms.py:

    class PhotoForm(forms.ModelForm):
    image = forms.ImageField(label='Image')
    class Meta:
        model = Photo
        fields = ('image', )


class PersonForm(forms.ModelForm):
    title = forms.CharField(max_length=128)
    body = forms.CharField(max_length=245, label="Item Description.")
    file_field = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}))

    class Meta:
        model = Person
        widgets = {
            'valyuta': forms.RadioSelect,
            'barter': forms.CheckboxInput,

        }
        fields = ('country', 'city', 'ban', 'yurus', 'reng', 'qiymet', 'valyuta', 'yanacaqnovu', 'oturucu', 'squtu', 'buraxilisili', 'hecm', 'seher', 'barter', 'metin')

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['city'].queryset = City.objects.none()


        if 'country' in self.data:
            try:
                country_id = int(self.data.get('country'))
                self.fields['city'].queryset = City.objects.filter(country_id=country_id).order_by('name')
            except (ValueError, TypeError):
                pass  # invalid input from the client; ignore and fallback to empty City queryset
        elif self.instance.pk:
            self.fields['city'].queryset = self.instance.country.city_set.order_by('name')

1 Ответ

0 голосов
/ 27 января 2020

Посмотрите, работает ли это. Создайте простую форму HTML вместо формы модели Django

<form enctype="multipart/form-data" action="" method="post">
    <input type="file" name="uploaded_images" accept="image/*" multiple>
    <input type="submit" name="upload" value="Upload">
</form>

На ваш взгляд:

if request.method == 'POST':
    for afile in request.FILES.getlist('uploaded_images'):
        #Save images in respective models with the links to other models
        return redirect('back/to/same/url')

Это позволит пользователю загружать несколько изображений одновременно и вы легко сможете работать с отдельными изображениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...