Commit faa7ae9f authored by aurellesia's avatar aurellesia

generic view

parent f14b1ea3
......@@ -11,21 +11,19 @@ class CategoryForm(forms.ModelForm):
}
}
class DateInput(forms.DateInput):
input_type = 'date'
class ProductForm(forms.ModelForm):
class Meta:
model=Products
fields="__all__"
error_messages = {
'name' : {
'required':'Name cannot be empty'
},
'price' : {
'required' :'Price cannot be empty'
},
'restock_date':{
'required' : 'Restock date cannot be empty'
},
'category':{
'required' : 'Category cannot be empty'
}
}
\ No newline at end of file
fields=[
'name',
'price',
'restock_date',
'category'
]
def __init__(self, *args, **kwargs):
super(ProductForm, self).__init__(*args, **kwargs)
self.fields['restock_date'] = forms.DateTimeField(widget=DateInput())
self.fields['category'] = forms.ModelChoiceField(widget=forms.Select, queryset=Category.objects.all(), required=False)
\ No newline at end of file
from django.db import models
from django.urls import reverse
# Create your models here.
class Category(models.Model):
category_text=models.CharField(max_length=200)
......@@ -15,6 +15,13 @@ class Products(models.Model):
def __str__(self):
return self.name
def restockdate(self):
return self.restock_date.strftime('%Y-%m-%d')
def get_absolute_url(self):
return reverse('product-create', kwargs={'pk':self.pk})
......
......@@ -17,7 +17,7 @@
{% csrf_token %}
<table style="margin:20px auto;">
<tr>
<td>Category Nameeeeeeeeeeee</td>
<td>Category Name</td>
<td>
<input type="text" name="category_text" value=""></td>
</tr>
......
......@@ -10,7 +10,7 @@
</tr>
</thead>
<tbody>
{% for item in data %}
{% for item in category_list %}
<tr>
<td>{{item.category_text}}</td>
<td>
......
<div>
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<div>
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}
<div >
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endif %}
<form method="post">
{% csrf_token %}
<table style="margin:20px auto;">
<tr>
<td>Name</td>
<td>
<input type="text" name="name" value=""></td>
</tr>
<tr>
<td>Price</td>
<td>
<input type="number" name="price" value=""></td>
</tr>
<tr>
<td>Restock Date</td>
<td>
<input type="date" name="restock_date" value=""></td>
</tr>
<tr>
<td>Category</td>
<td>
<select name="category">
{% for item in category %}
<option value="{{item.id}}">{{ item.category_text }}</option>
{% endfor %}
</select>
</tr>
<td></td>
<td><a type="button" href = "/products/">Back</a></td>
<td><input type="submit" value="Save"></td>
</tr>
</table>
{{ form.as_p }}
<input type="submit" value="Save">
</form>
</div>
\ No newline at end of file
<div>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Save">
</form>
</div>
\ No newline at end of file
......@@ -13,12 +13,17 @@
</tr>
</thead>
<tbody>
{% for item in data %}
{% for item in products_list %}
<tr>
<td>{{item.name}}</td>
<td>{{item.price}}</td>
<td>{{item.restock_date}}</td>
<td>{{item.category_id}}</td>
<td>{{item.restockdate}}</td>
<td>{{item.category.category_text}}</td>
<td>
<a type="button" href="delete-product/{{item.id}}" onclick="return confirm('Are you sure to delete this category ?');">Delete</a>
<a type="button" href="edit-product/{{item.id}}">Edit</a>
</td>
</tr>
{% endfor %}
</tbody>
......
......@@ -3,9 +3,12 @@ from . import views
app_name='prodcat'
urlpatterns = [
path('', views.productIndex, name='productIndex'),
path('cat/', views.categoryIndex, name='categoryIndex'),
path('add-product/', views.storeProduct, name='storeProduct'),
path('', views.ProductsListView.as_view(), name='product-index'),
path('add-product/', views.ProductsCreateView.as_view(), name='product-create'),
path('edit-product/<int:id>',views.UpdateProductsView.as_view(), name='product-destroy'),
path('delete-product/<int:id>',views.destroyProduct),
path('cat/', views.categoryIndex),
path('cat/add-category/', views.storeCategory, name='storeCategory'),
path('cat/delete-category/<int:id>', views.destroyCategory)
path('cat/delete-category/<int:id>', views.destroyCategory),
]
\ No newline at end of file
from django.shortcuts import render, redirect
from django.shortcuts import render, redirect, get_object_or_404
from .models import Products, Category
from .forms import CategoryForm, ProductForm
from django.views.generic import ListView, FormView, UpdateView
from django.views.generic.edit import CreateView
from django.urls import reverse_lazy
# Create your views here.
def categoryIndex(request):
result=Category.objects.all()
context={
'data':result,
data = Category.objects.all()
context = {
'category_list' : data
}
return render(request,'prodcat/categoryIndex.html',context)
return render(request, 'prodcat/categoryIndex.html', context)
def destroyCategory(request, id):
data = Category.objects.get(id=id)
......@@ -25,24 +28,32 @@ def storeCategory(request):
return render(request, 'prodcat/categoryAdd.html', {'form' : form})
def productIndex(request):
result=Products.objects.all()
context={
'data':result,
}
return render(request,'prodcat/productIndex.html',context)
class ProductsListView(ListView):
template_name = 'prodcat/productIndex.html'
model = Products
def get_context_data(self,**kwargs):
context = super().get_context_data(**kwargs)
context['products_list'] = Products.objects.all()
return context
def storeProduct(request):
form = ProductForm(request.POST or None, request.FILES or None)
if request.method == 'POST':
if form.is_valid():
print(form)
class ProductsCreateView(FormView):
form_class = ProductForm
template_name = 'prodcat/productAdd.html'
success_url = reverse_lazy('prodcat:product-index')
def form_valid(self, form):
form.save()
return super().form_valid(form)
class UpdateProductsView(UpdateView):
model = Products
form_class = ProductForm
template_name = 'prodcat/productEdit.html'
success_url = reverse_lazy('prodcat:product-index')
def get_object(self, *args, **kwargs):
product = get_object_or_404(Products, pk=self.kwargs['id'])
return product
def destroyProduct(request, id):
data = Products.objects.get(id=id)
data.delete()
return redirect('/products/')
\ No newline at end of file
pass
cat = Category.objects.all()
context={
'category' : cat,
'form' : form
}
return render(request, 'prodcat/productAdd.html', context)
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment