-1

Я новичок в django, и я пытаюсь создать блог. У меня уже есть почтовые модели с иностранным ключом для пользователя. Пользователи могут создавать простые сообщения, но я хотел бы пойти дальше. Я хочу включить возможность добавлять к каждому сообщению много файлов. Я думаю, что я должен создать модель под названием Files with file area. но я действительно не знаю, как сделать одну форму с сообщением и вводом для добавления файлов под формой сообщения. Я слышал, что мне нужно использовать набор форм, но я не могу найти хороший пример того, как это сделать. Подводя итог, я был бы признателен, если бы вы могли прислать мне какие-то учебники (примеры) или дать некоторые советы, как запустить его.django создавая форму с multifile uploading

редактировать:

Я сделал все так же, как и в примерах, и теперь у меня есть форма с входным файлом, но это не actualy закачано anytwhere. Когда я запускаю оболочку, я не имею никаких объектов вложений. это мой код.

Модели:

from django.db import models 
from django.contrib.auth.models import User 
from multiupload.fields import MultiFileField 
import datetime 
class PostManager(models.Manager): 
    def published(self,): 
     return self.get_queryset().filter(active=True, pub_date__lt=datetime.datetime.now()) 

class Post(models.Model): 
    author=models.ForeignKey(User, verbose_name=u"Autor postu", blank=True, null=True) 
    active=models.BooleanField(verbose_name=u"Aktywnosc postu", default="False") 
    title=models.CharField(max_length=40, verbose_name=u"tytul") 
    lead=models.TextField(verbose_name=u"wprowadzenie") 
    body=models.TextField(verbose_name=u"Zawartosc postu") 
    pub_date=models.DateTimeField(verbose_name=u"Data publikacji", blank="True", null="True") 

    objects= PostManager() 

    class Meta: 
     verbose_name=u"post" 
     verbose_name_plural=u"posty" 

class Attachment(models.Model): 
    post = models.ForeignKey(Post, verbose_name=u"post") 
    file = models.FileField(upload_to='attachments', verbose_name=u"Plik") 
    file_name=models.TextField(verbose_name=u"Nazwa pliku") 

просмотров:

from django.shortcuts import render, redirect, get_object_or_404 
from django.http import HttpResponse, HttpResponseRedirect 
from django.core.urlresolvers import reverse 
from django.contrib.auth import logout, login, authenticate 
from django.views.generic import ListView, DetailView 
from .models import Post 
import datetime 
from .forms import PostForm, CreationForm 
from django.views.generic.edit import FormView, CreateView 

class PostListView(ListView): 
    model= Post 

    def get_queryset(self,): 
     return Post.objects.published() 

class PostDetailView(DetailView): 
    model= Post 


def Edit(request, pk): 
    post= get_object_or_404(Post, pk=pk) 
    form= PostForm(instance=post) 
    context={ 
     'post': post, 
     'form': form, 
    } 
    return render(request,'posts/edit_post.html', context) 

def LogMeOut(request): 
    logout(request) 
    return HttpResponseRedirect('/posts') 

def log_form(request): 
    return render(request, 'posts/log_me_in.html', {}) 

def logged(request): 
    if request.method == 'POST':   
     user_name=request.POST.get('usr', '') 
     user_password=request.POST.get('pwd','') 
     user = authenticate(username=user_name, password=user_password) 
     if user is not None: 
      login(request,user) 
      return HttpResponseRedirect(reverse('post_list')) 
     else: 
      return HttpResponse('bieda') 


def apply_edit(request, post_id): 
    form=PostForm(request.POST) 
    if form.is_valid(): 
     instance=form.save(commit= False) 
     instance.author=request.user 
     instance.id=post_id 
     instance.pub_date=datetime.datetime.now() 
     instance.save(); 
     return HttpResponseRedirect(reverse('post_list')) 

def post_creation(request): 
    form=PostForm() 
    context= { 
     'form': form 
    } 
    return render(request, 'posts/post_creation.html', context) 

def my_posts(request): 
    user=request.user 
    object_list=user.post_set.all() 
    context={ 
     'object_list': object_list, 
    } 
    return render(request, 'posts/post_list.html', context) 




def create_post(request): 
    form=PostForm() 
    if request.method=='POST': 
     form=PostForm(request.POST) 
     if form.is_valid(): 
      instance=form.save() 
      instance.active=True; 
      instance.author=request.user 
      instance.pub_date=datetime.datetime.now() 
      instance.save(); 
    return HttpResponseRedirect(reverse('post_list')) 


class ContactView(CreateView): 
    model = Post 
    form_class = CreationForm 
    template_name = 'posts/post_creation.html' 
    success_url = 'posts/post_list.html' 

forms.py:

from django import forms 
from django.contrib.auth.models import User 
from .models import Post, Attachment 
import datetime 
from multiupload.fields import MultiFileField 

class PostForm(forms.ModelForm): 
    class Meta: 
     model= Post 
     exclude=['author', 'pub_date'] 

class CreationForm(forms.ModelForm): 
    class Meta: 
     model=Post 
     fields=['active', 'title', 'lead', 'body'] 



    files = MultiFileField(min_num=1, max_num=3, max_file_size=1024*1024*5) 


    def save(self, commit=True): 
     instance = super(ContactForm, self).save(commit=False) 
     instance.author=User 
     instance.pub_date=datetime.datetime.now() 
     instance.save() 
     for each in self.cleaned_data['files']: 
      Attachment.objects.create(file=each, post=instance, file_name=file.name) 

     return instance 

Я думаю, что URLs в порядке, так что я не публикуйте его. Может ли кто-нибудь проверить, правильно ли это. Если нет, то что с этим не так.

ответ

1

Я использую django-multiupload, это многоразовое приложение Django, которое вы можете интегрировать.

посмотреть на эту ссылку http://chive.ch/django-multiupload/

Смежные вопросы