Advertisement
amr_aly

Reusable_functions_in_django

Jun 11th, 2022 (edited)
1,101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.62 KB | None | 0 0
  1. ## in utils.py file write the following
  2. from django.apps import apps
  3. from django.db import models
  4. from django.core import exceptions
  5.  
  6. ##### check if field is exists or not
  7. @classmethod
  8. def model_field_exists(cls, field):
  9.    try:
  10.      cls._meta.get_field(field)
  11.      return True
  12.   except exceptions.FieldDoesNotExist:
  13.      return False
  14. models.Model.field_exists = model_field_exists
  15.  
  16.  
  17. ########### For Adding ....
  18. def adding(
  19.     request,
  20.     form_class, app_name, model_name,
  21.     url, template_path, related_field=None,
  22.     user=None, field_1=None,
  23.     field_2=None, field_3=None,
  24.     context={}
  25. ):
  26.     if request.method == 'POST':
  27.         form = form_class(
  28.             request.POST or None,
  29.             request.FILES or None,
  30.             user=user, f1=field_1, f2=field_2
  31.         )
  32.         if form.is_valid():
  33.             save_form = form.save(commit=False)
  34.             save_form.save()
  35.             messages.success(request,
  36.                 'Adding new (' + str(model_name) + ') done successfully') #
  37.             return redirect(reverse(url, args=(save_form.id,)))
  38.         else:
  39.             messages.error(request,
  40.                 'Add new (' + str(model_name) + ') failed ' )
  41.             return redirect(request.META.get('HTTP_REFERER', ''))
  42.     else:
  43.         form = form_class(user=request.user, f1=field_1, f2=field_2)
  44.         return render(request, template_path, context=({'form':form,} | context))
  45.  
  46. ###
  47. def editing(
  48.     request,
  49.     id_field,
  50.     form_class, app_name, model_name,
  51.     url=None, template_path=None, related_field=None,
  52.     user=None, field_1=None, field_2=None, field_3=None,
  53.     context={}
  54. ):
  55.     cls = apps.get_model(app_name, model_name)
  56.     qs = cls.objects.select_related(related_field).get(id=id_field)
  57.     if cls.field_exists('user'):
  58.         user = qs.user
  59.         print('User exists or not ==>> ', cls.field_exists('user'))
  60.     else:
  61.         user=None
  62.    
  63.     print('User exists or not ==>> ', cls.field_exists('user'))
  64.  
  65.     form = form_class(
  66.             request.POST or None,
  67.             request.FILES or None,
  68.             user=user,
  69.             f1=field_1,
  70.             f2=field_2,
  71.             instance=qs
  72.         )
  73.     if form.is_valid():
  74.         save_form = form.save()
  75.         save_form.save()
  76.         messages.success(
  77.             request, 'Save changes to (' + str(model_name) + ') done successfully')
  78.         return redirect(reverse(url, args=(save_form.id,)))
  79.    
  80.     return render(request, template_path, context=({'form':form,} | context))
  81.  
  82. ## Then you can use it in views.py as follows
  83. from your_project_name.utils import adding, editing
  84. def add_inventory(request, pro_id):
  85.     product = Product.objects.only().get(id=pro_id)
  86.     # print(product)
  87.     context = {
  88.         'product': product,
  89.     }
  90.     return adding(
  91.         request,
  92.         form_class=InventoryForm,
  93.         app_name='inventories',
  94.         model_name='Inventory',
  95.         url='edit_inventory',
  96.         template_path='inventories/add_inventory.html',
  97.         user=request.user,
  98.         field_1=product,
  99.         field_2=None,
  100.         field_3=None,
  101.         context=context
  102.     )
  103.  
  104.  
  105. def edit_inventory(request, inv_id):
  106.     qs = Inventory.objects.select_related('product').get(id=inv_id)
  107.     context={
  108.         'qs':qs
  109.     }
  110.     return editing(
  111.         request,
  112.         id_field=inv_id,
  113.         form_class=InventoryForm,
  114.         app_name='inventories',
  115.         model_name='Inventory',
  116.         url='edit_inventory',
  117.         template_path='inventories/edit_inventory.html',
  118.         # user=None,
  119.         field_1=qs.product,
  120.         field_2=None,
  121.         field_3=None,
  122.         context=context
  123.     )
  124.  
  125. #### forms.py
  126. class InventoryForm(forms.ModelForm):
  127.     class Meta:
  128.     model = Inventory
  129.     fields = [
  130.         'user',
  131.         'product',
  132.         'quantity',
  133.         'reserved_quantity',
  134.         'available_quantity',
  135.     ]
  136.  
  137.     def __init__(self, *args, user, f1, f2, **kwargs):
  138.     self.user = user
  139.     self.product = f1
  140.     super(InventoryForm, self).__init__(*args, **kwargs)
  141.     self.initial['user'] = self.user
  142.     self.initial['product'] = self.product
  143.  
  144. ########################################
  145.  
  146.            
  147.  
  148.  
  149.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement