Я новичок в 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 в порядке, так что я не публикуйте его. Может ли кто-нибудь проверить, правильно ли это. Если нет, то что с этим не так.