AttributeError at /customers/f0e85ace-438f-4c61-a129-6d5986e6f346/ 'customer' object has no attribute 'get'

Я только что начал django и пытаюсь найти ошибку. Похоже, что метод get() не распознается. Что мне делать? Я буду очень признателен за помощь

from django.db import models
from django.core.validators import RegexValidator
import uuid
# Create your models here.
class customer(models.Model):
    id=models.UUIDField(primary_key=True,default=uuid.uuid4)
    name=models.CharField(max_length=200,null=True)
    phone_no=models.CharField(max_length=200, validators= 
    [RegexValidator(r'^\d{1,10}$')],null=True)
    email=models.EmailField(max_length=200,null=True)

    def __str__(self):
        return self.name

class tag(models.Model):
    name=models.CharField(max_length=200,null=True)

    def __str__(self):
        return self.name

class products(models.Model):
    id=models.UUIDField(primary_key=True,default=uuid.uuid4)
    categories=[
        ('organic','organic'),
        ('inorganic','inorganic')
    ]
    name=models.CharField(max_length=200,null=True)
    price=models.FloatField(null=True)
    manufacturedate=models.DateTimeField(auto_now_add=True,null=True)
    description:models.TextField(null=True)
    categories=models.CharField(max_length=200,null=True,choices=categories)
    tag=models.ManyToManyField(tag)

    def __str__(self):
        return self.name


class order(models.Model):
    id=models.UUIDField(primary_key=True,default=uuid.uuid4)
    status=[
        ('pending','pending'),
        ('out of stock','out of stock',),
        ('Delivered',('Delivered'))
    ]
    ordered_date=models.DateTimeField(auto_now_add=True)
    status=models.CharField(max_length=200,null=True,choices=status)
    customer=models.ForeignKey(customer,null=True,on_delete=models.SET_NULL)
    product=models.ForeignKey(products,null=True,on_delete=models.SET_NULL)

urls.py url выглядит нормально, я не смог найти никакой ошибки

from django.urls import path
from . import views

urlpatterns=[
    path('',views.home),
    path('products/',views.product),
    path('customers/<str:pk>/',views.customer),
]

views.py Здесь в клиенте это не так, он говорит get не является атрибутом .Похоже, я что-то упускаю

from django.shortcuts import render
from .models import *

# Create your views here.
def home(request): 
    customers=customer.objects.all()
    orders=order.objects.all()
    total_customers=customers.count()
    total_orders=orders.count()
    delivered=orders.filter(status='Delivered').count()
    pending=orders.filter(status='pending').count()


    context={'customers':customers,'orders':orders,'total_customers':total_customers, 
    'total_orders':total_orders,'delivered':delivered,
    'pending':pending }

    return render(request,'accounts/home.html',context)

def product(request):
    product=product
    return render(request,'accounts/products.html')

def Customer(request,pk):
    Customer=customer.objects.get(id=pk)
    return render(request,'accounts/customers.html')

Вы получили эту ошибку, потому что сделали неправильно в приведенном ниже коде.

вместо:

path('customers/<str:pk>/',views.customer),

попробуйте это:

path('customers/<int:pk>/',views.customer),

Тогда это решит проблему. И не добавляйте поле ID в модель, потому что оно генерируется автоматически после миграции.

В файле views.py ваше представление называется Customer с заглавной буквы C. Когда вы пишете from .models import *, он импортирует вашу модель customer со строчной буквы c.

Таким образом, в urls.py когда вы пишете views.customer, это относится к модели, а не к представлению. Представление - это views.Customer:

urlpatterns=[
    path('',views.home),
    path('products/',views.product),
    path('customers/<str:pk>/',views.Customer),
]

Примечание: По соглашению, классы должны быть названы следующим образом UpperCamelCase, а функции - lower_snake_case. Следование этим соглашениям поможет вам избежать подобных ошибок и поможет другим людям прочитать ваш код. См. соглашения об именовании.

Вернуться на верх