2016-03-18 9 views
1

Im Джанго обучения и наткнулся на слизняка и Im ударил при отправке аргументов функции интерфейса для просмотраДжанго Как представлять слизняк как идентификатор для функции на основе зрения

Моего urls.py

url(r'^(?P<slug>[\w-]+)/$', views.detail, name='detail'), 

Views.py

def detail(request, slug): 
    post = Post.objects.get(id=slug) 
    comments=post.comment_set.all() 
    forms=CommentForm 
    if request.method == 'POST': 
     form=CommentForm(request.POST) 
     if form.is_valid(): 
      comment = form.save(commit=False) 
      comment.title = post 
      print comment 
      comment.save() 
     else: 
      print form.errors 
    else: 
     form = PostForm() 

model.py

class Post(models.Model): 
    title=models.CharField(max_length=200) 
    description=models.TextField(max_length=10000) 
    pub_date=models.DateTimeField(auto_now_add=True) 
    slug = models.SlugField(max_length=40, unique=True) 

    def __unicode__(self): 
     return self.title 

    def description_as_list(self): 
     return self.description.split('\n') 

    def get_absolute_url(self): 
     return reverse('detail',kwargs={'slug':self.slug }) 

В второй строке взглядов views.py post = Post.objects.get(id=slug), я считаю, что это неправильно представление, что может быть правильный способ сделать это?

Я получаю следующее сообщение об ошибке для приведенного выше кода enter image description here

Любая помощь очень appreciated..Thanks в advace

+0

Можете ли вы показать ваша модель 'Post'? –

+0

@ ParagTyagi-morpheus - .. Я редактировал вопрос, добавляя models.py ..., пожалуйста, проверьте – Coeus

+0

Пожалуйста, проверьте мой ответ. –

ответ

3

Предполагая, что ваш пост модель имеет поле слизняк, вы хотите сделать:

post = Post.objects.get(slug=slug) 

, который можно перевести как:

post = Post.objects.get(<name_of_field>=<argument_in_url>) 
+0

Спасибо ................. ура – Coeus

1

ошибка говорит о том, что id поле в Post модели (которая Джанго создает себя) является AutoField (проверьте this), который в основном bigint поля в терминах sql. Следовательно, при запросе на поле id он ожидает, что обязательное значение int else будет raise a exception.

В вашем случае Post модель должна иметь slug поле, если это не вид зделать, как показано ниже,

class Post(models.Model): 
    ... 
    ... 
    slug = models.SlugField(max_length=100) 
    ... 
    ... 

И обновите ваш запрос, как,

post = Post.objects.get(slug=slug) 
+0

Спасибо за помощь ......... cheers – Coeus

 Смежные вопросы

  • Нет связанных вопросов^_^