2016-07-31 6 views
0

Ich erstelle hier ein Bulletin mit Threads. Jeder Thread enthält ein Bild und dann kann der Thread mit Posts erweitert werden. Es ist wie 4chan.Datei hochladen in Django (funktioniert nicht)

Die Modelle werden nicht in der Datenbank gespeichert. Ich folgte diesem answer, um ein Datei-Upload-Beispiel zu erstellen.

Die Forum-App enthält ein einfaches Datei-Upload-Beispiel und die Upload-Objekte werden dort gespeichert.

Codebases (github)

Der Projektbaum

bookstore/ 
    chan/ 
    templates/chan/index.html 
    forms.py 
    admin.py 
    views.py 
    urls.py 
    forum/ 
    ... 
    bookstore/ 
    settings.py 
    urls.py 

Einstellungen

. 
. 
. 
MEDIA_URL = '/media/' 

MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 

Urls.py

from django.conf.urls import url, include 

from . import views 

urlpatterns = [ 
    url(r'^$', views.index, name='index'), 
    url(r'^create_post/(?P<thread_id>[0-9]+)/$', views.create_post, name='create_post'), 
    url(r'^create_thread/$', views.create_thread, name='create_thread'), 
] 

Ansichten

from django.shortcuts import render, redirect 

from . import models 
from . import forms 

def index(request): 
    threads = models.Thread.objects.all() 
    thread_form = forms.Thread() 
    post_form = forms.Post() 

    return render(request, 'chan/index.html',{ 
     'threads':threads, 
     'thread_form':thread_form, 
     'post_form':post_form, 
    }) 

def create_post(request, thread_id): 
    form = forms.Post(request.POST, request.FILES) 
    if form.is_valid(): 
     post = Post(
      text=request.POST['text'], 
      document=request.FILES['document'], 
      thread=models.Thread.get(pk=thread_id), 
     ) 
     post.save() 
    return redirect('chan:index') 

def create_thread(request): 
    form = forms.Thread(request.POST, request.FILES) 
    if form.is_valid(): 
     thread = Thread(
      text=request.POST['text'], 
      document=request.FILES['document'] 
     ) 
     thread.save() 
    return redirect('chan:index') 

Ich habe jetzt etwas Überprüfung stundenlang auf diese, die ich verpasst haben könnte.

Antwort

1

Ehrlich gesagt habe ich keine Ahnung, was du versuchst zu tun. Aber wenn ich in dieses Repo schaue, ist das Loch-Ding durcheinander. Ich habe ein paar Fragen für Sie ...

  1. Warum nicht __init__.py haben? (Loch Repo nicht hat, nicht gut)

    Best Practice: Platz init Py-Datei und rufen Sie das Modul mit from module import something

  2. Warum haben Sie nicht action Attribut?

    Sie haben url={% ...} aber Sie sollten action={%...}

+0

Irgendwie habe ich das __init__ unter gitignore links. –

+0

Das ist total ein dummer Fehler. Ich habe diese URL mit einer weiteren kleinen Änderung an der Aktion angepasst und es hat funktioniert. –

+0

Kann nicht sehen, wie ich das übersehen habe. –