latest news

2008-11-09 19:33:42

Umstellung und Migration

2 Comments

unanswered questions

2008-10-30 13:34:21

Syndication Feed-Problem

0 Replies

2008-11-17 16:49:19

dynamische urlpatterns...

2 Replies

2008-12-22 02:46:20

Fragen zu pagination ~~

1 Replies

Profile for morytox

Name morytox
Email Address n/a
Posts1
  • Wiki in 20 Min ShowMeDo Syntaxänderung?
    Board » Django das Framework » Probleme & Fragen
    Hallo liebe Community,

    ich wollte mich mit Django etwas vertrauter machen und habe nach dem Djangoproject Tutorial noch einmal das Wikitut von Showmedo begonnen.
    ( http://showmedo.com/videotutorials/video?name=1100000&fromSeriesID=110 )
    Bis zum 3. Video bin ich mit der alten Syntax zurande gekommen. Nun habe ich ein 2. Model angelegt (Tag) und wollte eine ManyToMany Verknüpfung anlegen. Ich habe das Problem, wenn ich einen Eintrag mit Tags Speicher möchte, bekomme ich die Meldung , dass die Tabelle (appordner)_page_tags nicht existiert. Was ja auch sein soll, da es eine Tabelle Page und eine Tag gibt. Als ausschlaggebende Zeile wird mir folgende genannt:
    for tag in tag_list:
                page.tags.add(tag)

    Im Anhang habe ich die Views.py und die Models.py angefügt. Falls noch mehr benötigt wird werde ich es hinzufügen.
    Ich habe ne weile überlegt und probiert, bin aber auf keine Lösung gestoßen und hoffe es liegt einfach nur wieder an aktualisierter Syntax.


    Ich nutze SQLite als DB und meine views.py sieht wie folgt aus:

    from djangotutorial.wiki.models import Page, Tag
    from django.shortcuts import render_to_response
    from django.http import HttpResponseRedirect
    from django.template import RequestContext
    from django import forms
    
    class SearchForm(forms.Form):
        text = forms.CharField(label="Enter search term")
        search_content = forms.BooleanField(label="Search content", required=False)
    
    def search_page(request):
        if request.method == "POST":
            f = SearchForm(request.POST)
            if not f.is_valid():
                return render_to_response("wiki/search.html", {"form":f}, context_instance=RequestContext(request))
            else:
                pages = Page.objects.filter(name__contains = f.cleaned_data["text"])
                contents = []
                if f.cleaned_data["search_content"]:
                    contents = Page.objects.filter(content__contains = f.cleaned_data["text"])
                    
                return render_to_response("wiki/search.html", {"form":f, "pages":pages, "contents":contents}, context_instance=RequestContext(request))    
        f = SearchForm()
        return render_to_response("wiki/search.html", {"form":f}, context_instance=RequestContext(request))
    
    specialPages = {"SearchPage": search_page}
    
    def view_page(request, page_name):
        if page_name in specialPages:
            return specialPagespage name(request)
        try: 
            page = Page.objects.get(pk=page_name)
        except Page.DoesNotExist:
            return render_to_response('wiki/create.html', {'page_name':page_name})
        content = page.content
        return render_to_response("wiki/view.html", {"page_name":page_name, "content":content})
        
    def edit_page(request, page_name):
        try:
            page = Page.objects.get(pk=page_name)
            content = page.content
        except Page.DoesNotExist:
            content = ""
        return render_to_response("wiki/edit.html", {"page_name":page_name, "content":content}, context_instance=RequestContext(request))
    
    def save_page(request, page_name):
        content = request.POST["content"]
        tag_list = []
        if "tags" in request.POST:
            tags = request.POST["tags"]
            tag_list = [Tag.objects.get_or_create(name=tag) for tag in tags.split()]
        try:
            page = Page.objects.get(pk=page_name)
            page.content = content
            for tag in tag_list:
                page.tags.add(tag)
        except Page.DoesNotExist:
            page = Page(name=page_name, content=content)
        page.save()
        return HttpResponseRedirect("/wiki/page/" + page_name + "/")





    Die models.py wie folgt:
    from django.db import models
    
    # Create your models here.
    
    class Tag(models.Model):
        name = models.CharField(max_length=20, primary_key=True)
    
    class Page(models.Model):
        name = models.CharField(max_length=20, primary_key=True)
        content = models.TextField(blank=True)
        tags = models.ManyToManyField(Tag)