Home > Blockchain >  AttributeError at /customers/f0e85ace-438f-4c61-a129-6d5986e6f346/ 'customer' object has n
AttributeError at /customers/f0e85ace-438f-4c61-a129-6d5986e6f346/ 'customer' object has n

Time:10-14

I have just started django and struggling to find error. It seems like get() method is not being recognized. What should I do?

models.py:

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 seems ok I could not find any mistake.

from django.urls import path
from . import views

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

views.py;

Here in the customer it is not it says get is not the attribute. Seems like I am missing something.

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')

CodePudding user response:

In views.py, your view is named Customer with uppercase C. When you write from .models import *, it imports your model customer with lowercase c.

Thus, in urls.py when you write views.customer, this refers to the model, not the view. The view is views.Customer:

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

Note: By convention, classes should be named following UpperCamelCase, and functions should be named following lower_snake_case. Following these conventions will help you avoid this kind of mistakes, and help other people to read your code. See naming conventions.

CodePudding user response:

You got this error because you did wrong in below code.

instead:

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

try this:

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

Then it will solve erro. And don't add ID field to model because it generates automatically after migrations.

  • Related