Как мне написать форму в Джанго - PullRequest
0 голосов
/ 07 декабря 2011

Я пишу приложение для моего последнего проекта в классе и пытаюсь написать форму для создания новой темы. В основном все, что мне нужно, это

имя пользователя: текстовое поле здесь

Название темы: Текстовое поле здесь

Пост: текстовое поле здесь

Я хочу сделать это в forms.py вместо создания шаблона для него.

url(r"^(.+)/new_thread/$", new_thread, name="thread_new_thread"),

Это моя нить URL

def list_threads(request, forum_slug):
    """Listing of threads in a forum."""
    threads = Thread.objects.filter(forum__slug=forum_slug).order_by("-created")
    threads = mk_paginator(request, threads, 20)
    template_data = {'threads': threads, 'forum_slug': forum_slug} 
    return render_to_response("forum/list_threads.html", template_data, context_instance=RequestContext(request))

Это мое представление list_threads, у меня есть кнопка, которая должна ссылаться на версию forms.py моего нового сообщения в теме

class Thread(models.Model):
    title = models.CharField(max_length=60)
    slug = models.SlugField(max_length=60)
    created = models.DateTimeField(auto_now_add=True)
    creator = models.ForeignKey(User, blank=True, null=True)
    forum = models.ForeignKey(Forum)

    class Meta:
        unique_together = ('slug', 'forum', )

    def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        super(Thread, self).save(*args, **kwargs)

    def get_absolute_url(self):
        return reverse('forum_list_posts', args=[self.forum.slug, self.slug])

    def __unicode__(self):
        return unicode(self.creator) + " - " + self.title

    def num_posts(self):
        return self.post_set.count()

    def num_replies(self):
        return self.post_set.count() - 1

    def last_post(self):
        if self.post_set.count():
            return self.post_set.order_by("created")[0]

Это моя нить модель

Есть предложения?

1 Ответ

1 голос
/ 07 декабря 2011

Прочитайте документацию:

https://docs.djangoproject.com/en/dev/topics/forms/modelforms/

Я предполагаю, что у Thread есть модель.

class ThreadForm(ModelForm):

    def __init__(self, forum, user, *args, **kwargs):
        super(ThreadForm, self).__init__(*args, **kwargs)
        self.forum = forum
        self.user = user

    def save(self):
        thread = super(ThreadForm, self).save(commit=False)
        thread.forum = self.forum
        thread.creator = self.user
        thread.save()
        return thread

    class Meta:
        model = Thread
        exclude = ('slug', 'created', 'creator', 'forum') 

В ваших взглядах:

def thread_add(self, forum_id):
    data = None
    if request.method == 'POST':
        data = request.POST
    forum = Forum.objects.get(id=form_id)
    form = ThreadForm(forum=forum, user=request.user, data=data)
    if form.is_valid():
        form.save()
        .............
    return render_to_response .....

В вашей модели осталось поле "Post: текстовое поле здесь"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...