Sefa
Sefa

Reputation: 8992

Can't create new instance of django model

I have a customer model:

class Customer(models.Model):
    Name = models.TextField(blank=False)
    Surname = models.TextField(blank=False)
    PhoneNumber = models.TextField()
    Address = models.TextField()
    SendSms = models.BooleanField(default=True)
    SendEmail = models.BooleanField(default=True)
    Email = models.TextField()

    @classmethod
    def create(cls, name, surname, phoneNumber, address , sendSms, sendEmail, email):
        customer = cls(Name=name, Surname = surname, PhoneNumber = phoneNumber
                        , Address = address, SendSms = sendSms, SendEmail = sendEmail
                        , Email = email)
        return customer

Referencing this doc, that's how i create new objects.

I have a form to create new customers. Works like this:

class NewCustomer(View):
    def get(self, request):
        c = {}
        c.update(csrf(request))
        return render_to_response("Customer/NewCustomer.html", c)

    def post(self, request):
        customer = Customer.create(request.POST.get("name", ""), request.POST.get("surname", ""),
                        request.POST.get("PhoneNumber", ""), request.POST.get("Address", ""),
                        request.POST.get("SendSms", ""), request.POST.get("SendEmail", ""),
                        request.POST.get("Email", ""))
        return HttpResponseRedirect("/Customers/",{"customerId":customer.id})

I have another view witch lists all Customers but i get empty array in that view.

def AllCustomers(request):
    return render_to_response("Customer/AllCustomers.html", {"customers": Customer.objects.all()})

Can someone point me what i am missing here to create object?

Upvotes: 2

Views: 3482

Answers (2)

Iván Alegre
Iván Alegre

Reputation: 1896

The best option would be using Django's ORM create method. But if you want to override this method adding some functionality. You should use a Manager

class CustomerManager(models.Manager):
    def create(self, **kwargs):
        super(CustomerManager, self).create(**kwargs)
        # Here it goes custom code

Then you should refer to the Manager in the Model

class Customer(models.Model):
    objects = CustomerManager()

    Name = models.TextField(blank=False)
    ...    

Upvotes: 1

falsetru
falsetru

Reputation: 368944

You need to call save method to actually make a record:

customer = cls(Name=name, Surname = surname, PhoneNumber = phoneNumber
               ,Address = address, SendSms = sendSms, SendEmail = sendEmail
               ,Email = email)
customer.save()
return customer

or need to use Model.objects.create(..):

customer = cls.objects.create(
               Name=name, Surname = surname, PhoneNumber = phoneNumber
               ,Address = address, SendSms = sendSms, SendEmail = sendEmail
               ,Email = email)
return customer

Upvotes: 2

Related Questions