简体   繁体   English

如何使用 django 原始表单上传图像

[英]How to upload image using django raw form

Im trying to upload image using django raw form.我正在尝试使用 django 原始表单上传图像。 How do I get image from the form?如何从表单中获取图像? So that I can assign it to a model and save it?这样我就可以将它分配给模型并保存它? Is there a method like cleaned_data.get() for images?有没有像cleaned_data.get()的图像方法?

models.py模型.py

class University(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    name = models.CharField(max_length=255)
    about = models.TextField(max_length = 2083)
    facts = models.TextField(max_length=2083, blank=True, null=True)
    type_of_university = models.CharField(max_length = 20, choices = UNIVERSITY_TYPE_CHOICES)
    logo = models.ImageField(upload_to = 'logo', blank=True, null=True)
    cover_photo = models.ImageField(upload_to= 'cover_photo', blank=True, null=True)

    def __str__(self):
        return self.name

forms.py表格.py

class UniversityForm(forms.Form):
    name                        = forms.CharField(max_length=255)
    about                       = forms.CharField()
    facts                       = forms.CharField(required=False)
    type_of_university          = forms.ChoiceField(choices=UNIVERSITY_TYPE_CHOICES)
    logo                        = forms.ImageField(required=False)
    cover_photo                 = forms.ImageField(required=False)

views.py视图.py

class UniversityFormView(View):
    def get(self, *args, **kwargs):
        main_form = UniversityForm()
        context = {
            'main_form':main_form
        }
        return render (self.request, 'university/initial_form.html', context)

    def post(self, *args, **kwargs):
        main_form = UniversityForm(self.request.POST, self.request.FILES)
        context = {
        'main_form': main_form
        }
        if main_form.is_valid():
            name                = main_form.cleaned_data.get('name')
            about               = main_form.cleaned_data.get('about')
            facts               = main_form.cleaned_data.get('facts')
            type_of_university  = main_form.cleaned_data.get('type_of_university')
            logo               = main_form.cleaned_data.get()'logo')
            cover_photo        = main_form.cleaned_data.get('cover_photo')
            university = University(
                user                = self.request.user,
                name                = name,
                about               = about,
                facts               = facts,
                type_of_university  = type_of_university,
                logo                = logo,
                cover_photo         = cover_photo 
            )
            university.save()
            messages.success(self.request, "Form submitted successfully!")
            return redirect('address_form')
        else:
            messages.warning(self.request, "Something went wrong!")
            return redirect('university_form')
        return render (self.request, 'university/initial_form.html', context)

Thanks!谢谢!

use a model form instead of form and assign user from request.user in views使用模型表单而不是表单并在视图中从 request.user 分配用户

class UniversityCreateForm(forms.ModelForm):

    class Meta:
        model = University
        # dont have to add user field here
        fields = ['name',
              '-----',
              ]

class EducationCreateView(CreateView):
    model = University
    form_class = UniversityCreateForm
    template_name = 'your.html'
    success_url = reverse_lazy('/')

    def form_valid(self, form):
        form.instance.user = self.request.user
        valid_data = super(EducationCreateView, self).form_valid(form)
        return valid_data

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM