Reputation: 8992
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
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
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