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
. Следование этим соглашениям поможет вам избежать подобных ошибок и поможет другим людям прочитать ваш код. См. соглашения об именовании.