LINUX.ORG.RU

[Django]как сделать автоматически slugfield?

 


0

1

вместо User, использую Author:

from django.contrib.auth.models import User

class Author(User):
    login = models.SlugField(unique=True)

и создаю нового юзера в системе так:

from django.contrib.auth.models import User
from myproject.blog.models import Author

def register(request):
    ...
    user = Author(username=username, email=email, password=password)
    user.save()

на что вылезает ошибка:

IntegrityError at /register
Exception Value: column login is not unique

т.е. User создается правильно, а вот Author уже нет, так как поле login - пустое.

Есть ли какой-нибудь способ сгенерировать его автоматически?
Спасибо.



Последнее исправление: Donnie_Darko (всего исправлений: 2)

Use slugify, Luke!

from django.template.defaultfilters import slugify
...
user = Author(username=username, email=email, password=password)
user.login = slugify(username)
user.save()
Snorg
()

А если делать так:

def register(request):
    ...
    user = Author(login=username, email=email, password=password)

Или в чем собственно проблема по подробнее.

BigAlex ★★★
()

т.е. User создается правильно, а вот Author уже нет, так как поле login - пустое.

А вы считаете, что джанга магическим образом сгенерит содержимого SlugField сама?:)

Пример выше можно сделать даже удобнее

class Author(User):
    # ...fields...
    def __init__(self, *args, **kwargs):
        try:
            kwargs['login'] = slugify(kwargs['username'])
        except IndexError:
            raise Http404
        super(Author, self).__init__(*args, **kwargs)

И оно будет работать совсем как надо.

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

Алсо, я тупой идиот, что, впрочем, простительно в 3 часа ночи.

Там, конечно же, не IndexError, а KeyError

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