LINUX.ORG.RU

Помогите нубу с джангой(

 , ,


0

2

Всем привет.

Прошу сильно не пинать за столь ламерский пост. Я только учусь web-разработке. Хочу написать блог для своей школы на Django. Реализовал уже регистрацию и авторизацию пользователей. Но столкнулся с проблемой при обработке формы создания нового поста. Получаю ошибку вида:

TypeError at /create_post/
create() takes exactly 1 argument (7 given)

models.py:


class Post(models.Model):
    title = models.CharField(u"Название статьи", max_length=666)
    teaser = RedactorField(verbose_name=u"Анонс", max_length=100)
    text = RedactorField(
        verbose_name=u"Основной тект",
        max_length=1000,
        redactor_options={
            'autoformat': True,
            'focus': 'true',
            'overlay': True
        }
    )
    post_date = models.DateTimeField(u"Дата создания статьи", auto_now_add=True)
    user_profile = models.ForeignKey(UserProfile, blank=True)
    category = models.ForeignKey(Category, blank=True)
    tag = models.ForeignKey(Tag, blank=True)

    def create_post(self, title, teaser, text, category, tags):
        obj = Post.objects.create(self,
            title=title,
            teaser=teaser,
            text=text,
            category=category,
            tags=tags,
        )
        obj.save()
        return obj

    class Meta:
        verbose_name = u"пост"
        verbose_name_plural = u"посты"
        ordering = ["-post_date"]

views.py:

@csrf_exempt
def create_post (request):
    if not request.user.is_authenticated ( ):
        return HttpResponseRedirect ( "/" )
    form = CreatePostForm ( request.POST )
    if request.method == "POST" and form.is_valid ( ):
        post = Post ( )
        post.create_post (
            title = form.cleaned_data [ "title" ],
            teaser = form.cleaned_data [ "teaser" ],
            text = form.cleaned_data [ "text" ],
            category = form.cleaned_data[ "category" ],
            tags = form.cleaned_data[ "tags" ]
        )
        return HttpResponseRedirect ( "/posts/1/" )
    else:
        form = CreatePostForm ( )
    return render ( request, "forms/create_post_form.html", {
        "form": form,
    } )

Прошу знающих людей помочь с проблемой.

Заранее спасибо всем откликнувшимся.

С питоном знаком слабо, но позволю себе ответить:
Где-то в джанге случайно не занято имя функции create()? Попробуй переименовать, что-ли...

NeverLoved ★★★★★ ()

Зачем вообще тебе нужна функция def create_post ? во вьюхе сделай так -

post = Post (title=form.cleaned_data["title"],
             teaser = form.cleaned_data ["teaser"],.... и т.д

post.save()

create_post удали. Всё.

Еще посмотри доки на modelform

pi11 ★★★★★ ()
Последнее исправление: pi11 (всего исправлений: 1)

Реализовал уже регистрацию и авторизацию пользователей

в джанге это из коробки есть.
про функцию сказали уже.

Komintern ★★★★★ ()
Ответ на: комментарий от pi11

Зачем вообще тебе нужна функция def create_post ?

Чтобы реализовать трушную бизнес-логику. Я читал, говорят, что работать с базой из вьюхи - плохой тон.

Gaslamp ()
Ответ на: комментарий от Gaslamp

Ну во-первых view в джанге это контроллер. Во-вторых в моем варианте ты просто передаешь параметры модели и вызываешь её метод. В-третьих твой вариант во вьюхе отличается от моего только вывозовом obj.save.

pi11 ★★★★★ ()

Class-based views тебе помогут. Плюс посмотри в том же районе формы.

И не изобретай велосипед.

C1nde ()
Ответ на: комментарий от Komintern

в джанге это из коробки есть.

Можешь ткнуть носом в ман? А то я тоже собирался велосипедить на эту тему.

vurdalak ★★★★★ ()
Ответ на: комментарий от Komintern

Вторая ссылка про какое-то кастомное приложение, а в первой 3,5 метода, которые можно и самому написать.

vurdalak ★★★★★ ()
Ответ на: комментарий от vurdalak

ну такое. registration по-моему тоже из коробки, но могу ошибаться. возможно его pip притащил.

Komintern ★★★★★ ()
Ответ на: комментарий от vurdalak

написать можно все, но отказываясь от contrib.auth вы отказываетесь автоматически от всех приложений, которые используют его, а таких много.

и смотреть нужно сюда: https://docs.djangoproject.com/en/dev/topics/auth/

django-registration - это отдельное приложение, которое часто используется для облегчения процесса подтвреждения емейлов и прочих фич при регистрации.

chicane ()
Последнее исправление: chicane (всего исправлений: 2)
Ответ на: комментарий от Gaslamp

Чтобы реализовать трушную бизнес-логику. Я читал, говорят, что работать с базой из вьюхи - плохой тон.

это хорошо, но не стоит доходить до маразма. Я для себя определил, что стоит просто заранее договорится что есть «работа с базой» а что есть бизнес логика. Стандартный конструктор для модели вполне может быть бизнес логикой как и метод save() А вот filter(field__joined_field__gt=5) действительно не стоит делать внутри view.

chicane ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.