2013-03-13 2 views
1

Я довольно новичок в Django, и я пытаюсь создать поле пули в моделях django. Таким образом, после Джанго 101 учебника, я попытался создать поле пробкового из следующего models.pyAuto create slug field in django 1.5 models - пример из учебника django

class Poll(models.Model): 
    question = models.CharField(max_length=200) 
    pub_date = models.DateTimeField('date published') 
    slugp = models.SlugField(max_length=255, unique=True) 

    def __unicode__(self): 
     return self.question 

    def save(self, *args, **kwargs): 
     self.slugp = slugify(self.question) 
     super(Poll, self).save(*args, **kwargs) 

, а затем я использую Джанго API следующим образом:

from writedb.models import Poll, Choice 
from django.utils import timezone 
p = Poll(question="What's new?", pub_date=timezone.now()) 
p.save 
# out: <bound method Poll.save of <Poll: What's new?>> 
p.slugp 
#out: u'' 

Все, что я делать Поле slugp, похоже, не заполняется (или это то, как я его не принимаю) Я не считаю поле заполняемым в базе данных тоже). Мне интересно, что я делаю неправильно. Любые указатели были бы очень благодарны - и извините, если это вопрос 101.

+2

Я не уверен, что это опечатка, но 'p.save' должно быть' p.save() '. Первый - это просто вызов атрибута (как показывает результат '>'), в то время как последний на самом деле вызывает метод сохранения –

+1

@ TimmyO'Mahony: Мне казалось, были полным идиотом. Это было действительно недостающее(), которое вызывало это. Пожалуйста, напишите как ответ, и я соглашусь с этим. – AJW

+1

Только совет: используйте '' slug'' вместо '' slugp''. Упрощает многое, поскольку это имя по умолчанию, ожидаемое многими частями Django, освобождая вас от необходимости явно указывать поле пули в некоторых случаях. – hayavuk

ответ

4

Вы неправильно вызываете метод save. p.save должно быть p.save(). Первый будет просто возвращать содержимое атрибута save, который является самим методом, где последний фактически выполняет этот метод.