#python #django
#python #django
Вопрос:
У меня есть 2 записи в таблице posts, одна из строк в таблице имеет рейтинг NULL, а другая имеет рейтинг 2, оба имеют одинаковый идентификатор пользователя, скажем, 5
Я сначала реализую это
views.py
class Rating(TemplateView):
template_name = 'base/rating.html'
def get(self,request,slug,*args,**kwargs):
user_id = request.user.id
post = get_object_or_404(Post.objects.filter(user_id=user_id,rating__isnull=True))
return render(request,self.template_name)
urls.py
url(r'^post/addRating/(?P<slug>. ?)/$',views.Rating.as_view(),name="post_rating"),
Таким образом, фактическая концепция заключается в том, чтобы не отображать представление, если столбец рейтинга
не равен нулю
Таким образом, первая запись с рейтингом null должна возвращать страницу 404, но это не так, а вторая запись отображается правильно
Может ли кто-нибудь помочь мне это исправить?
Комментарии:
1. Если то, что вы описываете, верно, то ни один из них не будет показывать страницу 404; один получит одно сообщение, другой — другое. Так что, вероятно, ваши данные не такие, как вы думаете, или
user_id
содержат неправильное значение.2. @RemcoGerlich итак, давайте проигнорируем второе условие и сосредоточимся на первом, все равно оба отображаются. идентификатор пользователя также тот же
3. get_object_or_404 не может вернуть оба, он возвращает только один или вызывает 404. И вы не показываете нам, как вы отображаете вещи.
4. @RemcoGerlich может быть, я ошибаюсь, я пытаюсь получить правильные вещи, размещая то, что я пробую. Можете ли вы это исправить?
5. Все, что я вижу, это та строка, которая должна получить сообщение с рейтингом null. Вероятно, вам следует включить в вопрос остальную часть вашего представления, urlpattern, URL-адреса, которые вы пытаетесь использовать, и их результаты.
Ответ №1:
Вам нужно более внимательно прочитать документ django, приведенный выше код неверен. Чтобы использовать get_object_or_404, вы должны написать что-то вроде (из django doc)
from django.shortcuts import get_object_or_404
def my_view(request):
my_object = get_object_or_404(MyModel, pk=1)
Для вашего продвижения вы должны написать что-то вроде:
posts = Post.objects.filter(user_id=user_id,rating__isnull=True)
post = posts and posts[0]
Комментарии:
1. Это неправильно, в документе, на который вы ссылаетесь, указано, что первый аргумент get_object_or_404 также может быть набором запросов, что он и делает. А другие аргументы могут быть пустыми, почему бы и нет?