Слизняк Джанго в базовом представлении функции - PullRequest
0 голосов
/ 21 марта 2019

я просто студент.У меня есть еще один пост, как этот код, но просто игнорировать это.Я экспериментирую с рендерингом представлений.

Теперь я хочу знать, как использовать мой уже существующий код с slug.

вот мой views.py, который строит с id,

def BookDetail(request, id):
most_recent = Book.objects.order_by('-timestamp')[:3]
book= get_object_or_404(Book, id=id)
form = CommentForm(request.POST or None)
if request.method == "POST":
    if form.is_valid():
        form.instance.user = request.user
        form.instance.post = book
        form.save()
        return redirect(reverse("book-detail", kwargs={
            'id': book.pk
        }))

if request.user.is_anonymous:
    user_membership = None
else:
    try:
        user_membership = Customer.objects.get(user=request.user)
    except Customer.DoesNotExist:
        user_membership = None

context = {
    'user_membership': user_membership,
    'form': form,
    'book': book,
    'most_recent': most_recent,

}
return render(request, 'catalog/book_detail.html', context)

и вот моя новая модель книги, которая возвращает имя слизня,

class Book(models.Model):
slug = models.SlugField(unique=True, help_text="Enter BIC Code", null=True)
title = models.CharField(max_length=200) #more fields after this

timestamp = models.DateTimeField(default=timezone.now)


activeReference = models.ManyToManyField(Membership)


def __str__(self):
    return self.title

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

@property
def get_comments(self):
    return self.comments.all().order_by('-timestamp')

@property
def pages(self):
    return self.page_set.all()

class Page(models.Model):
slug = models.SlugField(max_length=50)
book = models.ForeignKey(Book, on_delete=models.SET_NULL, null=True)
preview = models.FileField(upload_to='book_content', validators=[pdf_file_extension], help_text="PDF File Only")

def __str__(self):
    return self.slug

def get_absolute_url(self):
    return reverse('page-detail',
                   kwargs={
                       'book_slug': self.book.slug,
                       'page_slug': self.slug
                   })

надеюсь, вы мне поможете.

1 Ответ

1 голос
/ 21 марта 2019

Вам просто нужно изменить id на slug вот так:

def BookDetail(request, slug):
    most_recent = Book.objects.order_by('-timestamp')[:3]
    book= get_object_or_404(Book, slug=slug)
    ...
...