Первый аргумент get_object_or_404 () должен быть Modelt, а не «функцией» - PullRequest
0 голосов
/ 11 июня 2019

Первый аргумент get_object_or_404 () должен быть Model, Manager или QuerySet, а не 'function'.

Я пытаюсь показать сведения о планшете на основе планшета в базе данных, но он продолжает получать эту ошибку ValueError. Может кто-нибудь помочь мне узнать, что я делаю не так?

это мои views.py

from django.shortcuts import render, get_object_or_404
from .models import PharmaceuticalCapsules, PharmaceuticalSuspension, 
PharmaceuticalPowder, PharmaceuticalSyrup, \
PharmaceuticalTablet


def alltablet(request):
tablet = PharmaceuticalTablet.objects
return render(request, 'tablets.html', {'tablet': tablet})


def tabdetail(request, tab_id):
tabdetail = get_object_or_404(alltablet, pk=tab_id)
return render(request, 'tab_detail.html', {'tablet': tabdetail})

это мои models.py

from typing import re
from django.db import models

class PharmaceuticalTablet(models.Model):
tab_name = models.CharField(max_length=100)
tab_image = models.ImageField(upload_to='image/', blank=True, null=True)
tab_dose_strength = models.CharField(max_length=100)
tab_pack = models.CharField(max_length=100)
tab_form = models.CharField(max_length=200)
tab_dose = models.CharField(max_length=100, default='Direction By Physician')
tab_storage = models.CharField(max_length=100)
tab_usage = models.CharField(max_length=100)
tab_brandname = models.CharField(max_length=100)
tab_composition = models.CharField(max_length=100)

def __str__(self):
    return self.tab_name

браузер показывает

ValueErrorat /tablet/1/
First argument to get_object_or_404() must be a Model, Manager, or QuerySet, not 'function'.
Request Method:
GET 
Request URL:
http://127.0.0.1:8000/tablet/1/ 

Django Version:
v2.2.1 

Exception Type:
ValueError 

Exception Value:
First argument to get_object_or_404() must be a Model, Manager, or QuerySet, not 'function'.

Ответы [ 2 ]

2 голосов
/ 11 июня 2019

Как показывает ошибка, вы пытаетесь передать get_object_or_404(...) функцию вместо набора запросов или модели.Я думаю, что вы хотите использовать PharmaceuticalTablet.objects.all(), если вы не хотите фильтровать его раньше.


def alltablet(request):
    tablet = PharmaceuticalTablet.objects
    return render(request, 'tablets.html', {'tablet': tablet})


def tabdetail(request, tab_id):
    tabdetail = get_object_or_404(PharmaceuticalTablet.objects.all(), pk=tab_id)
    return render(request, 'tab_detail.html', {'tablet': tabdetail})
0 голосов
/ 11 июня 2019

tabdetail = get_object_or_404 (PharmaceuticalTablet, pk = tab_id)

внести это изменение. Вы хотите определить модальный, а не функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...