Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## in utils.py file write the following
- from django.apps import apps
- from django.db import models
- from django.core import exceptions
- ##### check if field is exists or not
- @classmethod
- def model_field_exists(cls, field):
- try:
- cls._meta.get_field(field)
- return True
- except exceptions.FieldDoesNotExist:
- return False
- models.Model.field_exists = model_field_exists
- ########### For Adding ....
- def adding(
- request,
- form_class, app_name, model_name,
- url, template_path, related_field=None,
- user=None, field_1=None,
- field_2=None, field_3=None,
- context={}
- ):
- if request.method == 'POST':
- form = form_class(
- request.POST or None,
- request.FILES or None,
- user=user, f1=field_1, f2=field_2
- )
- if form.is_valid():
- save_form = form.save(commit=False)
- save_form.save()
- messages.success(request,
- 'Adding new (' + str(model_name) + ') done successfully') #
- return redirect(reverse(url, args=(save_form.id,)))
- else:
- messages.error(request,
- 'Add new (' + str(model_name) + ') failed ' )
- return redirect(request.META.get('HTTP_REFERER', ''))
- else:
- form = form_class(user=request.user, f1=field_1, f2=field_2)
- return render(request, template_path, context=({'form':form,} | context))
- ###
- def editing(
- request,
- id_field,
- form_class, app_name, model_name,
- url=None, template_path=None, related_field=None,
- user=None, field_1=None, field_2=None, field_3=None,
- context={}
- ):
- cls = apps.get_model(app_name, model_name)
- qs = cls.objects.select_related(related_field).get(id=id_field)
- if cls.field_exists('user'):
- user = qs.user
- print('User exists or not ==>> ', cls.field_exists('user'))
- else:
- user=None
- print('User exists or not ==>> ', cls.field_exists('user'))
- form = form_class(
- request.POST or None,
- request.FILES or None,
- user=user,
- f1=field_1,
- f2=field_2,
- instance=qs
- )
- if form.is_valid():
- save_form = form.save()
- save_form.save()
- messages.success(
- request, 'Save changes to (' + str(model_name) + ') done successfully')
- return redirect(reverse(url, args=(save_form.id,)))
- return render(request, template_path, context=({'form':form,} | context))
- ## Then you can use it in views.py as follows
- from your_project_name.utils import adding, editing
- def add_inventory(request, pro_id):
- product = Product.objects.only().get(id=pro_id)
- # print(product)
- context = {
- 'product': product,
- }
- return adding(
- request,
- form_class=InventoryForm,
- app_name='inventories',
- model_name='Inventory',
- url='edit_inventory',
- template_path='inventories/add_inventory.html',
- user=request.user,
- field_1=product,
- field_2=None,
- field_3=None,
- context=context
- )
- def edit_inventory(request, inv_id):
- qs = Inventory.objects.select_related('product').get(id=inv_id)
- context={
- 'qs':qs
- }
- return editing(
- request,
- id_field=inv_id,
- form_class=InventoryForm,
- app_name='inventories',
- model_name='Inventory',
- url='edit_inventory',
- template_path='inventories/edit_inventory.html',
- # user=None,
- field_1=qs.product,
- field_2=None,
- field_3=None,
- context=context
- )
- #### forms.py
- class InventoryForm(forms.ModelForm):
- class Meta:
- model = Inventory
- fields = [
- 'user',
- 'product',
- 'quantity',
- 'reserved_quantity',
- 'available_quantity',
- ]
- def __init__(self, *args, user, f1, f2, **kwargs):
- self.user = user
- self.product = f1
- super(InventoryForm, self).__init__(*args, **kwargs)
- self.initial['user'] = self.user
- self.initial['product'] = self.product
- ########################################
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement