Django community: RSS
This page, updated regularly, aggregates Django Q&A from the Django community.
-
Django table update using Ajax
I want to update my django template data using Ajax. I want to let the users update the status from the dropdown and it should reflect without the page being refreshed Please refer this Django template {% for vulnerability in vulnerabilitys %} <tr> <th scope="row" >{{vulnerability.id}}A{{vulnerability.sNo}}</th> <td>{{vulnerability.vul_title}}</td> <td>{% for asset in vulnerability.asset.all %}{{asset}}<br>{% endfor %}</td> <td><span {% if vulnerability.severity|lower == 'info' %} class="badge rounded-pill bg-info" {% elif vulnerability.severity|lower == 'high' %} class="badge rounded-pill bg-danger" {% endif %}> {{vulnerability.severity}}</span></td> <td>{{vulnerability.vul_url}}</td> <td>{{vulnerability.last_seen|date:'d-m-Y H:i'}}&nbsp;<i class='fas fa-clock' style='color:rgb(48, 75, 228)'></i></td> <td><select id="ab" data-item = {{vulnerability.id}} qty-item="{{vulnerability.status}}" class="update" onchange="if (this.selectedIndex) doSomething();"> {% if vulnerability.status == 'Open' %} <option value="{{ vulnerability.status }}">{{ vulnerability.status }}</option> <option value="InProgress">InProgress</option> <option value="Fixed">Fixed</option> </select> {% elif vulnerability.status == 'InProgress' %} <option value="{{ vulnerability.status }}">{{ vulnerability.status }}</option> <option value="Open">Open</option> <option value="Fixed">Fixed</option> </select> {% else %} <option value="{{ vulnerability.status }}">{{ vulnerability.status }}</option> <option value="InProgress">InProgress</option> <option value="Open">Open</option> </select> {% endif %} <h5>{{vulnerability.status}}</h5></td> </tr>{% endfor %} script in the template $(document).on('change', '.update', function(){ // var item = $(this).closest('tr'); // editItem(item); var pid = $(this).attr('data-item'); var stat = $(this).attr('qty-item'); var x = document.getElementById("ab").value; console.log("OLD",stat); console.log("NEW",x) var elem = document.getElementById('myTable2'); elem.style.color = 'green'; $.ajax({ url:'/statUpdate/', data:{'pid': pid, 'stat':stat, 'x':x}, // dataType:'json', success: function(data){ // $('h5').html(data); } }); … -
How to differentiate between user inactivity and continous http request in django?
I would like to logout the session if there is no activity on web application from user. Currently, I have implemented custom middleware to logout for configured time interval. In my application, there is need to do continuous polling every 2 seconds. But, in my custom middleware class "def process_request(self, request)" gets called everytime when polling is getting executed. So, the session never gets logout, as this polling also it is considering as user activity. Now, how do I differentiate between user inactivity & polling? Code: from django.utils.deprecation import MiddlewareMixin from django.contrib.auth import logout from django.contrib import messages from datetime import datetime, timedelta from django.contrib import auth from django.conf import settings class CustomMiddleware(MiddlewareMixin): def process_request(self, request): if not request.user.is_authenticated : #Can't log out if not logged in return try: if datetime.now() - request.session['last_touch'] > timedelta( 0, settings.AUTO_LOGOUT_DELAY * 60, 0): auth.logout(request) del request.session['last_touch'] return except KeyError: pass request.session['last_touch'] = datetime.now() settings.py: SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer' AUTO_LOGOUT_DELAY = 1 -
Celery Beat Django
I am trying to run beat celery function but I am getting an error of: Error: Unable to parse extra configuration from command line. Reason: not enough values to unpack (expected 2, got 1) This is my code: @periodic_task(name="fun_123", run_every=crontab(minute="1")) def fun_123(context): bill = Bill.objects.get(id=context["id"]) if bill.date < make_aware(datetime.now()): bill.check = False bill.save() This is my command that I am using command: celery -A backend worker -l DEBUG -BE fun_123 -
how we can add delivery charges area wise in django ecommerce project
Hi I am working on Django Ecommerce Project and I want to set delivery charges According area wise can any one guide me how I can add delivery charges using Django?? -
Django TemplateView is not Working with This Code
Am having issues writting Views for django oscar extended TemolateView class CatalogueView(TemplateView): """ Browse all products in the catalogue """ context_object_name = "products" template_name = 'oscar/catalogue/browse.html' model = Product def get(self, request, *args, **kwargs): try: self.search_handler = self.get_search_handler( self.request.GET, request.get_full_path(), []) response = super().get(request, *args, **kwargs) except InvalidPage: # Redirect to page one. messages.error(request, _('The given page number was invalid.')) return redirect('catalogue:index') return response def get_search_handler(self, *args, **kwargs): return get_product_search_handler_class()(*args, **kwargs) def get_context_data(self, **kwargs): context = super(CatalogueView, self).get_context_data(**kwargs) ctx = {} ctx['summary'] = _("All products") ctx['pro_list'] = Product.objects.all() ctx['pro_list1'] = Product.objects.all().filter().order_by('upc') search_context = self.search_handler.get_search_context_data( self.context_object_name) ctx.update(search_context) return ctx Don't mind the messy Code indentation format. Django Oscar uses the class based TemplateViews and I want to write more queresets for my products model but everything seems not working. get_context_data will not work. I need a way to add more Queresets to the TemplateView in the catalogue view. How can this be resolved? I need to filter more queresets for the Product django django-models django-views -
i faced CircularDependencyError in django
I faced a CircularDependencyError error. so i tried find . -path "/migrations/.py" -not -name "init.py" -delete find . -path "/migrations/.pyc" -delete and delete db.sqlite3 file and then i tried python manage.py makemigrations and migrate but it's still error what is auth.0013_historicaluser, auth.0014_delete_historicaluser, users.0001_initial ?? well i used AbstractUser and django-simple-history. i really confused... what happend...? Traceback (most recent call last): File "/data/test-table/manage.py", line 22, in <module> main() File "/data/test-table/manage.py", line 18, in main execute_from_command_line(sys.argv) File "/root/miniconda3/envs/gdaj/lib/python3.9/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line utility.execute() File "/root/miniconda3/envs/gdaj/lib/python3.9/site-packages/django/core/management/__init__.py", line 413, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/root/miniconda3/envs/gdaj/lib/python3.9/site-packages/django/core/management/base.py", line 354, in run_from_argv self.execute(*args, **cmd_options) File "/root/miniconda3/envs/gdaj/lib/python3.9/site-packages/django/core/management/base.py", line 398, in execute output = self.handle(*args, **options) File "/root/miniconda3/envs/gdaj/lib/python3.9/site-packages/django/core/management/base.py", line 89, in wrapped res = handle_func(*args, **kwargs) File "/root/miniconda3/envs/gdaj/lib/python3.9/site-packages/django/core/management/commands/migrate.py", line 92, in handle executor = MigrationExecutor(connection, self.migration_progress_callback) File "/root/miniconda3/envs/gdaj/lib/python3.9/site-packages/django/db/migrations/executor.py", line 18, in __init__ self.loader = MigrationLoader(self.connection) File "/root/miniconda3/envs/gdaj/lib/python3.9/site-packages/django/db/migrations/loader.py", line 53, in __init__ self.build_graph() File "/root/miniconda3/envs/gdaj/lib/python3.9/site-packages/django/db/migrations/loader.py", line 286, in build_graph self.graph.ensure_not_cyclic() File "/root/miniconda3/envs/gdaj/lib/python3.9/site-packages/django/db/migrations/graph.py", line 274, in ensure_not_cyclic raise CircularDependencyError(", ".join("%s.%s" % n for n in cycle)) django.db.migrations.exceptions.CircularDependencyError: auth.0013_historicaluser, auth.0014_delete_historicaluser, users.0001_initial class PayHistoryChange(models.Model): branch = models.ForeignKey("Branch", on_delete=models.CASCADE, null=False) payhistory = models.ForeignKey("PayHistory", on_delete=models.CASCADE, null=False) ... history = HistoricalRecords() -
get() returned more than one Item -- it returned 2! - Django Foreign Key Query
I have table A which has a column which is a Foreign Key - details_id pointing to a Primary Key in another table B in Django class A(models.Model): per_id = models.TextField(primary_key=True) hobby = models.TextField() details_id = models.ForeignKey(B, models.DO_NOTHING, blank=True, null=True) # the foreign key class B(models.Model): details_id = models.AutoField(primary_key=True) # the primary key fav_food = models.TextField() I am trying to fetch the details_id in table B, from the per_id in table A qs=qs.filter(per_id="2398") # this gives me the queyset for the person with per_id=2398 details=qs[0].details_id.details_id # this line gives the error The problem is that since there are 2 entries in the table B which have the same details_id, I am getting the following error - get() returned more than one B -- it returned 2! Table A - Table B - And I want to retrieve both of the values How can I do that? Any help on this would be greatly appreciated!! -
Save data into mutli model uising django orm join
I am facing a problem with Django I have 2 models"batch", "batchyeild", these 3 have different forms and users enter data into it Now I am creating another form "History" In which the user will enter the data but In my backend, the data which will come from "history" will be distributed in these 3 model tables DB Now the payload requested data of history is batch_status commodity name pesticide actual produce acerage variety_id end_date I will be distributively saved in 2 models the batch has batch_status commodity name pesticide actual produce average variety_id and batchyeild has columns end_date the viewof both looks like class BatchViewSet(viewsets.ModelViewSet): permission_classes = [permissions.AllowAny] serializer_class = BatchSerializer queryset = Batch.objects.all() http_method_names = ['get', 'post', 'patch', 'delete'] pagination_class = GeneralPagination filterset_fields = ['farm_id', 'batch_status'] def create(self, request, *args, **kwargs): """ This function is used to create/update Batch objects for the provided list based on batch_id """ # todo to be optimised. # get the user data in logged_in_user_data from the request headers decoding the authorization key header = {'Content-Type': 'application/json', 'Authorization': request.headers['Authorization']} logged_in_user_data = get_user_data(request.headers['Authorization']) # # user_id will contain the user id of the logged in user user_id = logged_in_user_data.get('secondary_user_tbl_id') for data in request.data: data['updated_by_id'] … -
Deploying Django Application on Digital Ocean
I am migrating to digital Ocean for app hosting. I have setup the static file handling to be done by white-noise on my settings.py file, I have run the collectstatic command on my local machine and it works. When the app is being build on digital ocean it encounter's an error. The error stack is as below. -----> $ python manage.py collectstatic --noinput [skakey] [2022-02-23 06:00:36] Traceback (most recent call last): [skakey] [2022-02-23 06:00:36] File "/app/.heroku/python/lib/python3.9/site-packages/django/core/management/__init__.py", line 243, in fetch_command [skakey] [2022-02-23 06:00:36] app_name = commands[subcommand] [skakey] [2022-02-23 06:00:36] KeyError: 'collectstatic' [skakey] [2022-02-23 06:00:36] During handling of the above exception, another exception occurred: [skakey] [2022-02-23 06:00:36] Traceback (most recent call last): [skakey] [2022-02-23 06:00:36] File "/workspace/manage.py", line 25, in <module> [skakey] [2022-02-23 06:00:36] main() [skakey] [2022-02-23 06:00:36] File "/workspace/manage.py", line 21, in main [skakey] [2022-02-23 06:00:36] execute_from_command_line(sys.argv) [skakey] [2022-02-23 06:00:36] File "/app/.heroku/python/lib/python3.9/site-packages/django/core/management/__init__.py", line 425, in execute_from_command_line [skakey] [2022-02-23 06:00:36] utility.execute() [skakey] [2022-02-23 06:00:36] File "/app/.heroku/python/lib/python3.9/site-packages/django/core/management/__init__.py", line 419, in execute [skakey] [2022-02-23 06:00:36] self.fetch_command(subcommand).run_from_argv(self.argv) [skakey] [2022-02-23 06:00:36] File "/app/.heroku/python/lib/python3.9/site-packages/django/core/management/__init__.py", line 250, in fetch_command [skakey] [2022-02-23 06:00:36] settings.INSTALLED_APPS [skakey] [2022-02-23 06:00:36] File "/app/.heroku/python/lib/python3.9/site-packages/django/conf/__init__.py", line 84, in __getattr__ [skakey] [2022-02-23 06:00:36] self._setup(name) [skakey] [2022-02-23 06:00:36] File "/app/.heroku/python/lib/python3.9/site-packages/django/conf/__init__.py", line 71, in _setup [skakey] [2022-02-23 … -
How to get the plane password of Django admin user in pre_save signal when creating user from admin panel?
I need to log Django admin users in 3ed party authentication service. For that I need plane password without hashing. Here I used pre_save signal. That approach works well when I create an API endpoint for registration. But when I create an admin user from Django it always comes with defalut hashed password. Any idea how to get the plane password? -
How to rollback non linear migrations in django?
Suppose I have following migrations in Django. X / \ A B [A and B can represent any number of linear migrations.] \ / Y (merge migration). How can I rollback only B and Y? And keep A as it is. -
Different HTTP request method in a django view class
I had written a view class that has 4 request methods(PUT, POST, DELETE, GET). I want to limit the access via 405 error(Method Not Allowed).2 of my methods do not need any id(The POST and GET) but the others need id. how can I write URLs with different names, for different methods? my view: class CourseAPI(GenericAPIView): permission_classes = [IsAuthenticated] serializer_class = CourseSerializer def get(self, request, *args, **kwargs): def put(self, request, *args, **kwargs): def post(self, request, *args, **kwargs): def delete(self, request, *args, **kwargs): here is my URLs: path( "responsible-person/list/", CourseAPI.as_view(), name="course-list", ), path( "course/<int:pk>/delete/", CourseAPI.as_view(), name="delete-course", ), path( "course/<int:pk>/edit/", CourseAPI.as_view(), name="update-course", ), path( "course/add/", CourseAPI.as_view(), name="add-course", ), is there any way to write like this? path( "course/add/", CourseAPI.post.as_view(), name="add-course", ) -
Django/React/Axios Trying to create an image gallery
I have a web app for an alumni group that manages events, scholarships, etc. I have the models and web pages to display all event details, but I'm struggling to allow a user to upload multiple images for a particular event. Each event has an id and other fields, and the gallery has the image and a foreign key to the event id, so images with event_id 3 all are assigned to the event with id 3, etc. At the moment, I've got all of the other fields to display with my api urls being consumed by axios (pics below). I can successfully upload all images to an event in the django backend. I would like to display those images at the bottom right under Event pictures. I'll deal with modals to enlarge them later. My events details page. import React, { useState, useEffect } from "react"; import { useParams, useNavigate } from "react-router"; import { Link } from "react-router-dom"; import { getEventById, deleteEventById, getGallery, getGalleryById, getGalleryByEventId } from "../../api/apiCalls"; import { Card, CardGroup, Col, Modal, Button } from "react-bootstrap"; import "./Event.css"; const EventDetail = () => { const [event, setEvent] = useState([]); const { id } = useParams(); const … -
Get the current chat history after page refresh
I have created a chatbot that can be added in any website and bot will added on all pages of website. Bot is working fine problem is after page refresh or going another page of website, current chat history is lost. How can I show show current chat after page refresh. I am using django channels for live chat and saving messages in database. When chat start I create a history instance in Histoy model, and then save every message in Conversation model This is model to save the chat. This is chat to customer care type app so messages are saved in question/answer form. class ChatHistory(models.Model): TYPE = ( ('bot_chat', 'bot_chat'), ('user_chat', 'user_chat') ) company = models.ForeignKey(Company, on_delete=models.CASCADE, related_name='company_chat') customer = models.ForeignKey(Customer, on_delete=models.DO_NOTHING, related_name='customer_chat') date_time = models.DateTimeField(auto_now_add=True) chat_type = models.CharField(max_length=10, choices=TYPE) talker = models.ForeignKey(User, on_delete=models.SET_NULL, related_name='user_chat', null=True) saved_status = models.BooleanField(default=False) trained_status = models.BooleanField(default=True) class Meta: ordering = ['-pk'] class Conversation(models.Model): history = models.ForeignKey(ChatHistory, on_delete=models.CASCADE, related_name='chat_history') question = models.TextField(null=True) answer = models.TextField(null=True) time = models.TimeField(auto_now_add=True) -
Nginx configuration with gunicorn
Api is in Django framework and the Web app is in Angular both are different projects. Nginx and gunicorn worked well and upload both projects in the same directory but when I hit my domain it shows Django application default page. I want to show my static html page instead of Django default page. 'server{ listen 443; server_name class.domain.com; root /var/www/html/; index index.html; location /static/ { try_files $uri $uri/ /index.html; } location ~ ^/ { include proxy_params; proxy_pass http://unix:/run/gunicorn.sock; } }' -
how to display models.full_clean() ValidationError in django admin?
https://docs.djangoproject.com/en/4.0/ref/models/instances/#validating-objects from django.core.exceptions import ValidationError try: article.full_clean() except ValidationError as e: # Do something based on the errors contained in e.message_dict. # Display them to a user, or handle them programmatically. pass There tell us can Display them to a user, how to display errors in Admin? When I do nothing: When Settings.py Debug = True, it always render a ValidationError at /admin/xxx/xxx/xxx/change/ page. When Settings.py Debug = False, it always render a HTTP 500 page. -
KeyError at /webhook/ 'HTTP_STRIPE_SIGNATURE'
Following is my code for webhook with a Django application @csrf_exempt def webhook(request): webhook_secret = STRIPE_WEBHOOK_SECRET payload = request.body.decode('utf-8') signature = request.META["HTTP_STRIPE_SIGNATURE"] try: event = stripe.Webhook.construct_event( payload=payload, sig_header=signature, secret=webhook_secret) data = event['data'] except Exception as e: return e event_type = event['type'] data_object = data['object'] if event_type == 'invoice.paid': webhook_object = data["object"] stripe_customer_id = webhook_object["customer"] stripe_sub = stripe.Subscription.retrieve(webhook_object["subscription"]) stripe_price_id = stripe_sub["plan"]["id"] current_period_end = stripe_sub["current_period_end"] current_period_end = datetime.datetime.fromtimestamp(current_period_end, tz=None) pricing = Pricing.objects.get(stripe_price_id=stripe_price_id) user = User.objects.get(stripe_customer_id=stripe_customer_id) subscription = Subscription.objects.get(user=user) subscription.status = stripe_sub["status"] subscription.stripe_subscription_id = webhook_object["subscription"] subscription.pricing = pricing subscription.current_period_end = current_period_end subscription.save() if event_type == 'customer.subscription.deleted': webhook_object = data["object"] stripe_customer_id = webhook_object["customer"] stripe_sub = stripe.Subscription.retrieve(webhook_object["id"]) user = User.objects.get(stripe_customer_id=stripe_customer_id) subscription = Subscription.objects.get(user=user) subscription.status = stripe_sub["status"] subscription.save() return HttpResponse() and the url is path('webhook/', webhook, name='webhook') if I check the path https://example.com/webhook/, I am getting the error Exception Type: KeyError at /webhook/ Exception Value: 'HTTP_STRIPE_SIGNATURE' and in strpe account I am getting 500 error -
How to set Python path for django project?
I want to set up an existing project from git. The default python of ubuntu 20.04 is python3.8 and on the project I need to use python3.9. I installed anaconda which has python3.9, the project has a virtual env. when I want to install project dependencies I got this error: > pipenv install Warning: Your Pipfile requires python_version 3.9, but you are using None (/home/mahdi/.local/share/v/W/bin/python). $ pipenv check will surely fail. Pipfile.lock not found, creating… Locking [dev-packages] dependencies… alenvs/Project-UUOFIsQX/bin/python: not found running which python3 resulting this: > which python3 /home/mahdi/anaconda3/bin/python3 -
Calling Django Function from JS Ajax not working
I am trying to call a python function that calculates and converts some number input from a user form. I have an onclick button event to call the following JS function $.ajax({ type: "POST", url:"/calc_ha_range/", dataType: 'json', data: {'ra_deg' : ra_deg, 'dec_deg': dec_deg, 'glon_deg': glon_deg, 'glat_deg': glat_deg}, success: function(data) { jsonData = JSON.parse(data); ha_start.setAttribute('min', jsonData.min); ha_start.setAttribute('max', jsonData.max); ha_end.setAttribute('min', jsonData.min); ha_end.setAttribute('max', jsonData.max); // data.min = minimum val for HA range } }) I then have a django url mapping in the form of path('calc_ha_range/', utils.sensitivity_db.calc_hour_angle_range) which refers to the following python function def calc_hour_angle_range( request ): geo_lat = EarthLocation.from_geodetic(lon="XXXX",lat="XXXX",height=XXXX).lat.value if request.method == "POST": ra_deg, dec_deg, glon_deg, glat_deg = request.POST["ra_deg"], request.POST["dec_deg"], request.POST["glon_deg"], request.POST["glat_deg"] tan_geo_lat = math.tan( geo_lat*(math.pi/180.00) ) tan_dec = math.tan( dec_deg*(math.pi/180.00) ) cos_ha = -tan_dec * tan_geo_lat ha_rad = math.acos( cos_ha ) ha_deg = ha_rad*(180.00/math.pi) ha_h = ha_deg/15.00 output = {'min': -math.fabs(ha_h), 'max': +math.fabs(ha_h)} My issue is when the ajax call takes place in the onClick function I get an error in the console saying 404: mysite.com/calc_ha_range/ not found I have taken over this project from another amateur developer so my understanding of ajax and django is quite fragmented -
Unable to change the time to IST in django
Here is the code from the settings.py from where i change the time LANGUAGE_CODE = 'en-us' TIME_ZONE = 'Asia/Kolkata' USE_I18N = True USE_L10N = True USE_TZ = True this shows me correct time in the :8000/admin but not in the views.py here show you how user.otp_bring_time = datetime.now() this code how i set the time to the user this is how it appears in the photo But when i use it in views it shows me like this user_otp_issued_time =user.otp_bring_time How can i change it to inr -
Django free usage before subscription design question?
I have a Django app using a custom user allauth for a basic user sign up. Inside my application I have the ability to generate a report. However, after the user generates a single report I want to force a subscription using stripe payment processing. For doing something like this will I need a single user type or multiple user types and what is the best way to implement a forced subscription on a basic user model already created or will I have to rip the bandaid off and redesign the user model with a counter for the report usage? -
Temporarily Storing A List of Custom Class Objects in Django
I’m using an api (Spotify) to receive search results(Playlists and their data) and displaying them on my website. I could just directly print out the results to the website in an HTML table, however I need to perform Regex to get values. I created a PlaylistObject class to create where I stored only the attributes from the search that I want to use, as well as my regexs to find an email and username. I do not store this value in the database because it’s temporary and doesn’t need to be saved for long term. The problem I am having is with Pagination. The way I have the program set up, it has to recall the Spotify API function call that’s gets the search and assigns it to my list of PlaylistObjects every single time the page reloads. Because of pagination, it reloads every time the page is changed. The pagination is working and the program functions, however I want to find a way to temporary story my list of Spotify Objects, that way I dont have to recreate it every time I change the page. I don’t want to use a database because it would get filled fast with … -
Hyperlink in Django mail
I am trying to send e-mail in Django ( I am using send_mail) which contain hyperlink to my site(home page) in body? How can I do this? @register.filter def mail(gpd_user_mail): return send_mail( 'GPD System Notification: Please accept GPD', # smth like this: 'http://localhost:54332/home/', 'xm04wz1@bosch.com', [gpd_user_mail,], fail_silently=False, ) -
How to Use Viewsets and Serializers in pytest==7.0.1 Parametrize in Testing djangorestframework==3.13.1 get_serializer() and get_permission()?
I am using a Django Project Template from here. I am testing my serializers and permission in every viewset my app has. I want to use parametrize from pytest to reduce the lines I need to write tests to each serializers and viewset. I have 10 serializers and viewset that I need to test which has a pattern as shown bellow. test_drf_viewsets.py @pytest.mark.parametrize( ("app_url", "app_viewset", "serializer"), [ ( "api:mv-signup-list", viewset.UserSignUpMaterializedViewSet, serializers.UserSignUpMaterializedViewSerializer, ), ( "api:mv-total-list", viewset.TotalMaterializedViewSet, serializers.TotalMaterializedViewSerializer, ), ], ) def test_get_serializer( self, admin_user: User, app_url: str, app_viewset, serializer, rf: RequestFactory, ): viewsets = app_viewset request = rf.get(reverse(app_url)) request.user = admin_user viewsets.request = Request(request) viewsets.format_kwarg = None assert isinstance(viewsets.get_serializer(), serializer) However, when I run the code above, it shows this error TypeError: GenericAPIView.get_serializer() missing 1 required positional argument: 'self' The code presented above is omitted for brevity. -
How to use a ManyToMany field in django with a through model, displaying it and saving it?
I am doing a basic system in Django for a Spa that requires me to have an inventory, massages that use different quantities of product in the inventory, and then a service which will be a combination of multiple massages. So the user of the spa, which is the staff, will be able to create a service, select which massages make that service, and that will instantly trigger the subtraction of that product from the inventory. I used a many to many relation to relate the massages and the items, with a through model to save the amount used as well. My question is, what would be the best way to display this in a form so the staff can add new massages in a way where they can choose many items and their respective quantity that the massage will use? And how can i save all of this afterwards into the DB? I'm using PostgreSQL. This is how my models look right now: class Producto(models.Model): nombre = models.CharField(max_length=200, blank=False) línea = models.CharField(max_length=200, blank=False) proveedor = models.CharField(max_length=200, blank=False) costo_mxn = models.DecimalField(blank=False, max_digits=10, decimal_places=2) unidad_de_medición_choices = [ ("g", "g"), ("mL", "mL"), ("oz", "oz"), ] unidad_de_medición = models.CharField(max_length=20, choices=unidad_de_medición_choices,null=True, blank=True) cantidad_actual = …