Django community: RSS
This page, updated regularly, aggregates Django Q&A from the Django community.
-
Django sqlite3 deleting existing data in my Django sqlite3 after deployment/deploying to azure app service
the app was working just fine after deploying it to azure app service(ran to some issues but was later on fixed), and after that i decided to clear the data in the sqlite3 table and after i cleared the table, now every time i make some changes/deployment it clears the data in the sqlite3 table and the users of Django administration page. note : i didn't have this problem before clearing the table and everything was fine until i cleared it using flush in the terminal, and no error in the console it simply deletes all the data of the sqlite3 table and users. after deleting i expected it to only clear the table 1 time, and that's it but now it clears the data after every deployment, and only after every deployment. thanks in advance! -
Multitenancy architecture with test and real data
Now we are tasked with making a demo version of our project for potential clients with test data. The frontend is on React and the backend is on Django Rest Framework. The way I see it: Users log in to the demo version. We send a request (GET) to the backend. In the middleware we check the request: 3.1 If it is a demo query, user connects to the sql-lite database with the test data 3.2 Otherwise, we connect to the main database If it is PUT, PATCH, DELETE, then we just show a popup that the action has occurred Do you know of examples of this kind of functionality, or maybe see pitfalls along the way? -
How to solve this error deploying to render.com: django.db.utils.OperationalError: could not translate host name "***" to address?
What I'm trying to do: Deploy my django app to render.com with a postgres database. I'm following the render guide: Getting Started with Django on Render. Problem: I am getting a build failed log error saying the following: django.db.utils.OperationalError: could not translate host name "***" to address: Name or service not known (I have omitted the actual host name here). What research I have done: I have searched the error extensively, however all of the highly rated solutions I have encountered so far are based on using Docker like this which I am not using. settings.py (snippet): import dj_database_url DEBUG = 'RENDER' not in os.environ if DEBUG: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } } if not DEBUG: DATABASES = { 'default': dj_database_url.config(default='DATABASE_URL', conn_max_age=600) } In my render.com environmental variables, DATABASE_URL is saved with the postgres URL given by render which includes the database name, hostname, username and password. It follows this format: postgres://USER:PASSWORD@INTERNAL_HOST:PORT/DATABASE -
How do I get rid of "Select a valid choice. That choice is not one of the available choices." error when using a ModelChoiceField?
I am trying to manually render options for a select filed in a django template. When I submit the form I get an error: "Select a valid choice. That choice is not one of the available choices." The error message also asks for required fields which I have provided. locations models.py class Location(models.Model): name = models.CharField(max_length=20) is_source = models.BooleanField(default=False) is_destination = models.BooleanField(default=False) def __str__(self): return self.name orders forms.py class OrderForm(ModelForm): source = forms.ModelChoiceField(queryset=Location.objects.filter(is_source=True)) destination = forms.ModelChoiceField(queryset=Location.objects.filter(is_destination=True)) class Meta: model = Order fields = ['source', 'destination', 'items'] def save(self, commit=True): instance = super().save(commit=False) instance.order_number = math.floor(time.time()) instance.type = 'Purchase' instance.customer = self.context.get('request').user instance.status = 'New' if commit: instance.save() return instance orders create.html <form class="" method="POST"> {% csrf_token %} <h1 class='text-center'>Make an order</h1> <div class='row'> <div class='col-md-6 px-2'> <span class="fw-bold mx-2">Buy from</span> <div class="control-container border-primary d-flex align-items-center"> <i class="fa fa-map"></i> <select class="control ms-1 flex-grow-1" type="text" name="{{form.source.html_name}}" required > {% for value,label in form.source.field.choices %} <option value="{{value}}">{{label}}</option> {% endfor %} </select> </div> </div> <div class='col-md-6 px-2'> <span class="fw-bold mx-2">Receive in</span> <div class="control-container border-primary d-flex align-items-center"> <i class="fa fa-map"></i> <select class="control ms-1 flex-grow-1" type="text" name="{{form.destination.html_name}}" required > {% for value,label in form.destination.field.choices %} <option value="{{value}}">{{label}}</option> {% endfor %} </select> </div> </div> </div> <div class='row'> … -
Does parser type conversion happen inside django tests?
I have defined a custom argument parser from dateutil.relativedelta import relativedelta def custom_parser(value): # Do some actions with value return relativedelta(...) I the use this in a management command as parser.add_argument( "--tes", help=("blablaaa"), type=custom_parser, required=False, default='15s', ) Inside the handler, tes is correctly converted If I call the management command from the terminal directly. def handle(self, *_args, **options): tes = options['tes'] This is correctly converted to relativedelta when I directly run the command. However, If I run this using call_command('mycommand', tes='20s') options['tes'] is always a string. Why is it not being converted? Can't seem to find something on the codebase that would explain it. -
how to check if the uploading file format is different with the file name extension in Python
I want to check the uploading file format is different with the file name extension without saving the file. I tried magic library -
api_view['POST', 'GET'] against SOLID principles?
It's not a problem I'm facing its just an open discussion. in Django Rest framework we declare a decorator @api_view[] and it take an argument like POST GET PUT DELETE in my case I'm allowed to put more than one argument in the decorator and make one function made more than one responsibility like @api_view['POST', 'GET] def fbv_list(request):` if request.method == 'POST': #do something if request.method == 'GET': #do something in this case fbv_list make more than one thing which is POST and GET isn't in this case this function is against the Single responsibility class which is from SOLID principles ???? That's my question and if yes what is supposed to do to avoid breaking the SOLID . Thanks in advance. -
TransactionManagementError An error occurred in the current transaction. You can't execute queries until the end of the 'atomic' block. django project
I would like to add products or update them if they exist on the database. the data collected comes from an API, then I save it on my database that I created. models.py class Holl(models.Model): name=models.CharField(max_length=70,blank=True,null=True) service=models.CharField(max_length=255,blank=True,null=True) section=models.CharField(max_length=70,blank=True,null=True) class Meta: constraints=[ models.UniqueConstraint(fields=['name', 'section'], name='unique_rows') ] views.py url='http://myAPI/Holl/GetHoll' x=requests.get(url) contenu=x.json() all_holls=contenu['comm'] for holl in all_holls: ins, _ = Holl.objects.update_or_create(name=holl['name'],service=holl['service'], section=holl['section'],defaults={'name':holl['name'],'service':holl['service'],'section':holl['section']}) ins.save() After testing I get this error:An error occurred in the current transaction. You can't execute queries until the end of the 'atomic' block. -
Rest-API post request fails with one-to-many in Django REST Framework
I want to add with my API the possibility to add a record with a foreign key. I don't want to create a new record in the related table. I just want to add the ID of the existing record to the relation and save the record. The relation is shown in the following graphic. Diagram For example, the Get request to an acronym returns the following response: { "acronym": "Commercial water large stock third letter. Democrat your goal run price. Record myself decision attorney give.\nBill around difficult west protect change every. Various history total particular painting. Mission himself car can of try ten.", "decleration": "Less.", "date": "1992-02-12", "scope": { "scope_id": 16 } }, On the other hand, I would like the post to be possible with the following format: { "acronym": "Hello", "decleration": "World", "date": "2010-07-05", "scope": {"scope_id" : 16} } The corresponding part of the view (view.py) looks like this: @api_view(['GET', 'POST']) def acronym_list(request): if request.method == 'GET': acronyms = Acronym.objects.all() serializer = AcronymSerializer(acronyms, many=True) return Response(serializer.data) elif request.method == 'POST': serializer = AcronymSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) In serialzier my idea was therefore to use a separate scope serializer for the post … -
How to trigger a function on user creation with django?
I'm new to django and I would like to know if it is possible to trigger a function after a user has been created? For user creation I use the django administration interface. I want to assign a default theme to a user and to do this I have the following class in my models.py file class Profile(models.Model): user = models.OneToOneField(User, null=False, on_delete=models.CASCADE) selected_theme = models.TextField(max_length=50, default="Clair") This class allows me to store the theme selected by the user I would like to use a function that assigns a theme to a user when creating it. -
Why can't I increment models.IntegerField?
I want to have a counter field in my user profile model to see how many requests each user has made. However I cannot figure out how to increment the count. I am trying to increment an integer field which is a associated with a model which looks like this: class Profile(models.Model): user = models.OneToOneField( User, on_delete=models.CASCADE, primary_key=True, ) request_count = models.IntegerField(default=0) Then in my views I want to increment the request_count every time the user makes a request like so: user = User.objects.get(email=pk) user_profile = Profile.objects.get(user=user) user_profile.request_count += 1 user_profile.save() For some reason every time I run this it sets the request_count to 1. I assume this is because it is defaulting to 0 (the default I set) and then adding 1 to that. But why doesn't the value increment? Help greatly appreciated. -
Is it possible to use "unique together" in Laravel, similarly to Django?
So in Django you can do this: unique_together = ('name', 'username',) so if you try to register people like this: name: John, username: blabla <---- this gets registered name: John, username: haha <---- this gets registered name: John, username: blabla <---- this won't get registered because the combination of John and blabla already exists. Is the something similar is Laravel I could use? The main goal is to check if the name with the username exists together, if it does, throw back a validation error, otherwise register the record to the database. edit #1: if I can get something like "unique together" in laravel, is it possible to modify the validation method based on a hidden field in the form? For example I want the user to write their name and email and submit it, and have a checkbox. The checkbox would enable/disable the 'unique' check of the name, so like if I do this: name: John Doe Corp. email: whatever, checkbox: Ticked then it would check the 'name' column for duplicates. Otherwise: name: Jane Doe. email: whatever, checkbox: Not Ticked then it would not check the name column for duplicates, allowing the record to be saved into the database. -
Django: Get Values from a ListSerializer
I have Serializer like this one: print(SubFoodSerializer(instance.sub_foods,many=True).food_images) Inside each sub_food we have some food_images. I want to get access to all food_images of the sub foods The error I get is: 'ListSerializer' object has no attribute 'title' print(SubFoodSerializer(instance.sub_foods,many=True).food_images) -
Scandics in django admin log
I'm using python 3.7/django 3.2/Mezzanine6.0 and due to use of Mezzanine the entries of django admin log become seen by users in the page history: All page history is ugly (compared what it used to be with python2.7/django 1.8/Mezzanine4.0 as there wasn't seen any unnecessary brackets, but there seem to be no answer in the whole net for that problem ), but it would be nice to have at least the scandics correctly written in the page history, i.e. "Däte of birth instead" of "D\u00e4te of birth". clip from models.py class Author(Page): dob = models.DateField("Däte of birth", null=True) Can anybody help with the scandics ? All program code is available in https://github.com/miettinj/mezzanine/tree/main/mezzanine_app/page_types. -
Django serializer returns enmpty list
I have a class-based view that returns all the data in the table. But while accessing the URL all I get is an empty list. models.py from django.db import models class EmployeeModel(models.Model): EmpID = models.IntegerField(primary_key=True) EmpName = models.CharField(max_length=100) Email = models.CharField(max_length=100) Salary = models.FloatField() class Meta: verbose_name = 'employeetable' views.py from .models import EmployeeModel from .serializers import EmployeeSerialize from rest_framework.views import APIView from rest_framework.response import Response class EmployeeTable(APIView): def get(self,request): emp_obj = EmployeeModel.objects.all() empserializer = EmployeeSerialize(emp_obj,many=True) return Response(empserializer.data) serializers.py from rest_framework import serializers from .models import EmployeeModel class EmployeeSerialize(serializers.ModelSerializer): class Meta: model = EmployeeModel fields = '__all__' The table has 5 rows. It is not empty. I want to serialize all 5 rows -
Django login fails after mail activation
Here's how a signup works: class SignUpView(FormView): template_name = 'center-form.html' form_class = SignUpForm def form_valid(self, form): if form.is_valid(): user = User.objects.create_user( first_name=form.cleaned_data['first_name'], last_name=form.cleaned_data['last_name'], username=form.cleaned_data['username'], email=form.cleaned_data['email'], password=form.cleaned_data['password1'], is_active=False, ) activation_code = uuid.uuid4().hex Activation.objects.create(code=activation_code, user=user) activation_url = self.request.build_absolute_uri( reverse('activate', kwargs={'code': activation_code}) ) send_mail( 'Activate account', f'To activate your account, please follow the link below\n{activation_url}', 'Django', [form.cleaned_data['email']], fail_silently=False, ) messages.success( self.request, 'Please check your email for a message with the activation code.', ) return redirect('index') I eventually get a mail which contains some activation code. By clicking the link, I get a message indicating success as a result of: class ActivationView(View): @staticmethod def get(request, code): activation = get_object_or_404(Activation, code=code) activation.user.is_active = True login(request, activation.user) activation.user.save() activation.delete() messages.success(request, 'You have successfully activated your account') return redirect('index') However, when I try to sign in using the email and password used earlier, I get an error in the form: Please enter a correct username and password. Note that both fields may be case-sensitive. The form is AuthenticationForm and here's the view: class SignInView(LoginView): template_name = 'center-form.html' def get_context_data(self, **kwargs): data = super().get_context_data(**kwargs) data.update({'form_title': 'Sign in'}) return data -
where does user agent stylesheet come from?
basically, i have a html element i want to hide until i make a post request. to hide the element i used display:none; , but this is somehow being overiden by the user agent stylesheet. ive searched by whole html for the word "block" but it doesnt show up anywhere. i also have no external css everything is inline. Im hosting this page with djangos devserver... where is "display: block;" coming from? how do i stop it? below is a minimal reproducable example if what im doing. im trying to make my div element start hidden until a post request is made. <form action="http://localhost:8080" method="post" id = "mi_form"> <input type="submit" name="get prices" value="get prices" /> </form> <div id = "loader" style = "style= display:none; background:#000000; width:200px; height:200px; "> </div> <script type="text/javascript"> $("#mi_form").submit(function (e) { e.preventDefault(); // stops the default action $("#loader").show(); // shows the loading screen $.ajax({ url: test.php, type: "POST" success: function (returnhtml) { $("#loader").hide(); // hides loading sccreen in success call back } }); }); </script> -
Demo version of an existing project
We are currently faced with the task of making a demo of our project for clients with test data. We have the frontend in React and the backend in Django Rest Framework. One of the ideas that came to my mind is to use fixtures and return them in view, but there are a couple of problems such as: filtering, sorting, searching won't work... Another idea is to use a second database and multitenancy architecture to switch between databases in middleware for demo and regular users, but how to keep data up to date in next migrations? -
Generating invoice in django with Shiprocket API
I'm trying to generate invoice of my order in django with shiprocket API. So far I'm getting success Response but the generated URL of PDF is somewhat not understandable. #Response Im getting "{\"is_invoice_created\":true, \"invoice_url\":\"https:\/\/s3-ap-south-1.amazonaws.com\/kr-shipmultichannel-mum\/3116291\/invoices\/Retail000058ba9b309-c4bd-4c06-ba15-2cc76b7c5d1f.pdf\", \"not_created\":[],\"irn_no\":\"\"}" when I try to access above URL get - Access-Denied This XML file does not appear to have any style information associated with it. The document tree is shown below. <Error> <Code>AccessDenied</Code> <Message>Access Denied</Message> <RequestId>94ARWRYHGSBEZEH1</RequestId> <HostId>j32LvksmWatylm3TdFGYuJ1qvBwJ39Lj+qIbbQ3CC7AEcrgHnOYGd9fDocMeEwDD4GpzjXQLQhg=</HostId> </Error> This is the way I want the url to be https://s3-ap-south-1.amazonaws.com/kr-shipmultichannel-mum/3116291/invoices/Retail000058ba9b309-c4bd-4c06-ba15-2cc76b7c5d1f.pdf When I remove the slashed I get in Response I'm able to download the PDF and that's done manually. So how do I get working URL. #Views.py class GenerateInvoice(APIView): def post(self, request): order_id = request.query_params.get("ids", None) print(order_id) data = json.dumps({"ids": [order_id]}) headers = { "Content-Type": "application/json", "Authorization": settings.SHIPROCKET_TOKEN, } url = "https://apiv2.shiprocket.in/v1/external/orders/print/invoice" response = requests.post(url=url, data=data, headers=headers) return Response(response) -
TypeError: contactApi() got an unexpected keyword argument 'id' [closed]
views.pyurls.py I need a output for "GET by details by id and enter the details by 'PUT' method -
How to pass kwargs from different view classes without redundancy?
As of now I have 5+ views that are implementing get_context_data to pass a title to the respective template. ex: class SignUpView(FormView): def get_context_data(self, **kwargs): data = super().get_context_data(**kwargs) data.update({'form_title': 'Sign up'}) return data class SignInView(LoginView): template_name = 'center-form.html' def get_context_data(self, **kwargs): data = super().get_context_data(**kwargs) data.update({'form_title': 'Sign in'}) return data Each is passing form_title to template which in turn sets the main template title accordingly. <head> <meta charset="utf-8"> <title>{{ form_title }}</title> <link href="{% static 'css/bootstrap.min.css' %}" rel="stylesheet"> </head> Is there a better way to achieve the same thing without this redundancy? -
Django DeletionMixin and BaseDetailView causes a strange error with Mypy 0.991
So I have a very simple Django view that basically deletes a user account: class UserDeleteView(LoginRequiredMixin, SuccessMessageMixin, DeleteView): success_message = _("Your account has been deleted") success_url = reverse_lazy('account_logout') def get_object(self): return self.request.user After upgrading to Mypy 0.991 I am seeing this error: error: Definition of "object" in base class "DeletionMixin" is incompatible with definition in base class "BaseDetailView" [misc] For the life of me I can't figure out what this means, any help would be much appreciated. Thank you -
Add values from a dictionary to a ManytoMany field
class GuestOrder(models.Model): comment = models.CharField(max_length=400, blank=True, null=True) guest = models.ForeignKey(Guest, on_delete=models.SET_NULL, null=True) dish = models.ManyToManyField(Dish) ingredient = models.ManyToManyField(Ingredient) table = models.ForeignKey(Table, on_delete=models.CASCADE, blank=True, null=True) I have a queryset that returns 3 instances of GuestOrder. guest_orders = GuestOrder.objects.filter(table=table) <QuerySet [<GuestOrder: GuestOrder object (567)>, <GuestOrder: GuestOrder object (568)>, <GuestOrder: GuestOrder object (569)>]> and I have a dictionary where values are dish instances. { "guests":{ "23": [1, 2], "24": [2], "25": [3] } } How to set each of this values to a guestorder instance? -
Unsupported lookup 'unaccent' for CKEditor5 Field or join on the field not permitted
I am using CKEditor5 for my body field and trying to filter using unaccent like so Post.objects.filter(body__unaccent__icontains="text") but I get the error Unsupported lookup 'unaccent' for CKEditor5 Field or join on the field not permitted FYI, I did all the necessary configuration to be sure unaccent works perfectly. How do I know? I successfully executed Post.objects.filter(title__unaccent__icontains="text") where title is defined with CharField. My suggestion is that, unaccent didn't work for the first case because of CKEditor5. Is there a way to get this to work with this package? -
how to handle low capacity, multiple request update in django
In booking system, I have slot with capacity. now lets consider there is only 1 capacity is available and more two users are trying book the slot, at the same time. how I can handle this scenario? looking for any solutions from community.