Django community: RSS
This page, updated regularly, aggregates Django Q&A from the Django community.
-
How to check if FileField was uploaded?
I wanna store the "original" file name of an upload. This is because the file gets stored with a uuid as a new name. So I wrote this for my model: def save(self, *args, **kwargs): if self.file: self.original_filename = self.file.name super(MediaFile, self).save(*args,**kwargs) However, it also stores the filename to self.original_filename when nothing new has been uploaded. Thus the original_filename becomes the uuid the second time i save this model (e.g updating some other field in the admin). How to check in the save function if the FileField was really updated and a file has been uploaded? If possible I'd like to perform this check in the model so mit will work both for admin and custom upload pages. -
How do I set ProductDetail Page for different categories of product In Django?
I am new to Django. I am building a web store app. Case 1: I have a category for Phones with these Model: 'title', 'description', 'price', 'front camera', 'back camera', Case 2: I have another category for accessories with these Model: 'title', 'price', 'description', 'type' The problem: They both share the same ProductDetail Page...accessories detail is showing front and back camera as features which is akward although both are set to none. The Ask: How can I render different ProducDetail Page for different Categories -
Django ORM join on subquery
I have this two models: class Order(models.Model): value= models.FloatField() customer = models.ForeignKey( Customer, on_delete=models.CASCADE, related_name="orders" ) class Customer(models.Model): name = models.CharField(max_length=300, unique=True) and i want to annotate the sum of total orders purchased by the customer, this could be done pretty straightforward with this query: customer_total_subquery = Subquery( Customer.objects.filter(pk=OuterRef("customer")) .annotate(total=Coalesce(Sum("orders__value"), 0.0, output_field=FloatField())) .values("total") ) Order.objects.select_related("customer").all().annotate(customer_total=customer_total_subquery) The problem is, for only 37000 orders, this query takes 4 minutes. Produced query: SELECT "order"."id", (SELECT COALESCE(SUM(U1."order_value"), 0.0) AS "total" FROM "customer" U0 LEFT OUTER JOIN "order" U1 ON (U0."id" = U1."customer_id") WHERE U0."id" = "order"."customer_id" GROUP BY U0."id") AS "customer_total" FROM "order" LEFT OUTER JOIN "customer" ON ("order"."customer_id" = "customer"."id") We can see that there is a subquery that is executed once per row, so the customer_total subquery is executed 37000 times. The ideal solution is to query only once and use this results to append on the main query, the query bellow takes less than 100 ms: SELECT o.id, o.customer_id, subquery.customer_total from order as o left join ( select b.id, SUM(inner_order.value) as customer_total from customer b left join order inner_order on (inner_order.customer_id= b.id) group by b.id ) subquery on (subquery.id = o.customer_id) Is it possible to achieve this query (join on subquery) … -
Custom function for annotate
I am trying to extract records with my Django ORM Model: users = User.objects.values( "first_name", "last_name" ).annotate( user_level=custom_levels( F("user_level" ) ) ); The model is represented by: first_name last_name user_level: it may be [1] or [1,13] (it comes from saving a MultipleSelect throught forms.py) Goal: My goal is to process user_level in the query in order to transform those ids in text (I have a dict key:value with those ids). Any clue? Thank you -
How to create an Elasticsearch index for every instance of a Django models variable
In my Django models, for a model class named User there's a variable defined for user_id and I want to create a separate index for each and every customer using the user id. How do I modify this so that it creates a separate index based on the user_id? index_create = es.index(index="test_index", doc_type="docs", body= map_doc) #map_doc is defined elsewhere. I am trying to use this to store data in a separate index for separate users whenever this is invoked. -
email verification in django during registration
I had created Registration API which takes email and password and confirms password,and I achieved this by simply adding some lines in setting.py ACCOUNT_AUTHENTICATION_METHOD = "email" ACCOUNT_EMAIL_REQUIRED = True ACCOUNT_USERNAME_REQUIRED = False and urls.py urlpatterns = [ path('admin/', admin.site.urls), path('',include('mydata.urls')), path('auth/', include('rest_auth.urls')), path('auth/registration/', include('rest_auth.registration.urls')), ] I did not make any other changes in model.py and serializer.py, Now what to do next for email verification? Are there any simple steps to achieve this? -
Django Admin template and form change list
I have a strange behavior with the admin interface. I have a form (FioleListForm) with the following init, basically prefilter foreign keys. def __init__(self, *args, **kwargs): super(FioleListForm, self).__init__(*args, **kwargs) instance = kwargs.get('instance') if instance: if instance.lot: self.fields['lot'].queryset = Lot.objects.filter(Q(produit__id=instance.produit.id, shelf_life__gt=now().date(), stock__gt=instance.dose) | Q(id=instance.lot.id)) else: self.fields['lot'].queryset = Lot.objects.filter(Q(produit__id=instance.produit.id, shelf_life__gt=now().date(), stock__gt=instance.dose)) On the admin side, I have the following: @admin.register(Fiole) class FioleAdmin(VersionAdmin): change_list_template = 'admin/flacoTIapp/fiole/change_list.html' def get_changelist_form(self, request, **kwargs): return FioleListForm My issue is change_list_template is overriding the form. Thus the foreign key prefilter is not working. And if I do not put "change_list_template", Django is using the Django Admin contrib template. Thank you for your help. -
Javascript files in django have 404 error on Chrome
I think my javascript files are somehow not being read by Chrome. In the "Network" section of the developer tools (inspect) in Chrome, my js file has a status 404 and is colored red. The below script is the code in my html file: <script src="js/checkout.js" type="text/javascript"></script> The src path is correct, because vscode shows me the correct js file when I click the src=js/checkout.js of the script tag. I removed all cache from the browser, but the problem still persists. I hope you can guys can help me, and please leave a question if you have one. -
How to show only related objects in a django admin model
In a django admin model with inlines other admin model I want to show only related objects. simplified example: class Business(models.Model): name = models.TextField() class BusinessAddress(models.Model): business = models.ForeignKey(Business) address = models.TextField() class Pos(models.Model): business = models.ForeignKey(Business) label = models.TextField() class PosAddress(models.Model): pos = models.ForeignKey(Pos) address = models.ForeignKey(Address) So I want to retrieve only the related addresses of the selected pos in PosAddress and not all the available addresses class PosAddressAdmin(admin.ModelAdmin): model = PosAddress extra = 1 class PosAdmin(admin.ModelAdmin): model = Pos inlines = [PosAddressAdmin] How is that possible, if it is possible? -
'tuple' object has no attribute '_meta'
why is my queryset throwing this error whenever i make a search to the backend of account object ? def auto_search(request): user = request.user search_query = request.GET.get('q') payload = [] if search_query : search_results = Account.objects.filter(email__icontains=search_query).filter(username__icontains=search_query).distinct() user = request.user if user.is_authenticated: # get the authenticated users friend list auth_user_friend_list = FriendList.objects.get(user=user) for account in search_results: payload.append((account, auth_user_friend_list.is_mutual_friend(account))) payload = serializers.serialize('json',payload) return JsonResponse({'status':200 , 'data':payload}) Account model.py class Account(AbstractBaseUser): email = models.EmailField(unique=True) username = models.CharField(max_length=150, unique=True) first_name = models.CharField(max_length=150,blank=True) profile_image = models.ImageField(max_length=255,upload_to=get_profile_image_filepath, null=True, blank=True, default=get_default_profile_image) last_name = models.CharField(max_length=150,blank=True) phone_number = models.CharField(max_length=50, unique=True) date_of_birth = models.DateField(blank=True, null=True) friendlist models.py class FriendList(models.Model): user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="user") friends = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True, related_name="friends") # set up the reverse relation to GenericForeignKey notifications = GenericRelation(Notification) -
Got an error in cpanel column must appear in the GROUP BY clause
My app are working fine in my local pc. But problem arise when I am using this app to c panel. When I do a search query I got this error 'column "acc_installerledger.sales_invoice" must appear in the GROUP BY clause or be used in an aggregate function' Here acc my app, InstallerLedger my table name and sales_invoice is column name. def installerLedger(request): form = DateRangeForm() details = () installer = Installer.objects.order_by('name') if request.method == 'POST': installer_name = request.POST['installer'] form = DateRangeForm(request.POST or None) if form.is_valid(): details = InstallerLedger.objects.filter(name=installer_name, date__range=( form.cleaned_data['start_date'], form.cleaned_data['end_date'])).order_by('- id').annotate(balancecomm=Window(Sum('comm_balance'), order_by=F('id').asc()), balancecable=Window(Sum('cable_balance'), order_by=F('id').asc()), sales_invoicem=Min('sales_invoice'), namem=Min('name'), datem=Min('date') ) return render(request, 'installer/installer_ledger.html', {'tempo': details, 'form': form, 'installer': installer}) I am using Django 3.2 version. -
I can't create super user postgresql and Django
I am doing a project with Django in which I try to change the database from SQLITE to Postqresql. When I try to create the super user I get this error. Traceback (most recent call last): File "manage.py", line 22, in <module> main() File "manage.py", line 18, in main execute_from_command_line(sys.argv) File "C:\Users\l\anaconda3\envs\myenv\lib\site-packages\django\core\management\__init__.py", line 419, in execute_from_command_line utility.execute() File "C:\Users\l\anaconda3\envs\myenv\lib\site-packages\django\core\management\__init__.py", line 413, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "C:\Users\l\anaconda3\envs\myenv\lib\site-packages\django\core\management\base.py", line 354, in run_from_argv self.execute(*args, **cmd_options) File "C:\Users\l\anaconda3\envs\myenv\lib\site-packages\django\contrib\auth\management\commands\createsuperuser.py", line 79, in execute return super().execute(*args, **options) File "C:\Users\l\anaconda3\envs\myenv\lib\site-packages\django\core\management\base.py", line 398, in execute output = self.handle(*args, **options) File "C:\Users\l\anaconda3\envs\myenv\lib\site-packages\django\contrib\auth\management\commands\createsuperuser.py", line 189, in handle self.UserModel._default_manager.db_manager(database).create_superuser(**user_data) File "C:\Users\l\anaconda3\envs\myenv\lib\site-packages\django\contrib\auth\models.py", line 163, in create_superuser return self._create_user(username, email, password, **extra_fields) File "C:\Users\l\anaconda3\envs\myenv\lib\site-packages\django\contrib\auth\models.py", line 146, in _create_user user.save(using=self._db) File "C:\Users\l\anaconda3\envs\myenv\lib\site-packages\django\contrib\auth\base_user.py", line 67, in save super().save(*args, **kwargs) File "C:\Users\l\anaconda3\envs\myenv\lib\site-packages\django\db\models\base.py", line 726, in save self.save_base(using=using, force_insert=force_insert, File "C:\Users\l\anaconda3\envs\myenv\lib\site-packages\django\db\models\base.py", line 774, in save_base post_save.send( File "C:\Users\l\anaconda3\envs\myenv\lib\site-packages\django\dispatch\dispatcher.py", line 180, in send return [ File "C:\Users\l\anaconda3\envs\myenv\lib\site-packages\django\dispatch\dispatcher.py", line 181, in <listcomp> (receiver, receiver(signal=self, sender=sender, **named)) File "C:\Users\l\Desktop\django-course\Django(02-09-21)\crm1\accounts\signals.py", line 7, in customer_profile group = Group.objects.get(name='customer') File "C:\Users\l\anaconda3\envs\myenv\lib\site-packages\django\db\models\manager.py", line 85, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) File "C:\Users\l\anaconda3\envs\myenv\lib\site-packages\django\db\models\query.py", line 435, in get raise self.model.DoesNotExist( django.contrib.auth.models.DoesNotExist: Group matching query does not exist. settings.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': … -
getting error after submitting form inside detail view
I'm trying to create a dashboard for the staff users to fill in and edit some info regarding their users. the form works saves successfully but when I submit it I get this error: NoReverseMatch at /surveys/scientific/3 Reverse for 'scientific-info' with keyword arguments '{'pk': ''}' not found. 1 pattern(s) tried: ['surveys/scientific/(?P<pk>[^/]+)$'] this is my views.py: class ScientificInfoView(FormMixin, DetailView): model = ScientificInfo template_name = 'reg/scientific-info.html' form_class = ScientificInfoForm def get_success_url(self): return reverse('scientific-info', kwargs={'pk': self.object.id}) def get_context_data(self, **kwargs): context = super(ScientificInfoView, self).get_context_data(**kwargs) context['form'] = ScientificInfoForm(initial={'post': self.object}) return context def post(self, request, pk): user = get_object_or_404(ScientificInfo, id=pk) if request.method == 'POST': form = ScientificInfoForm(request.POST, instance=user) if form.is_valid(): form.save() redirect('scientific-info') else: form = ScientificInfoForm(instance=user) return render(request, 'reg/scientific-info.html', {'form': form}) def form_valid(self, form, *args, **kwargs): form.save() return super(ScientificInfoView, self).form_valid(form) and my template: <form method="POST" enctype="multipart/form-data" action="{% url 'scientific-info' pk=object.id %}"> {% csrf_token %} {{form}} <button type="submit">submit</button> </form> Im pretty sure that the action part in my form is causing the issue but I dont know how to solve it -
Passing Authenticated User into Model View in Django
I am creating a profile model that needs to pass the current authenticated user as the foreign key. If I do not exclude the user field, I can select from all the users, but I need to hide this field and pass the current authenticated user automatically when the form is submitted. Additional fields like name, dob, etc. will be added to the model by the user. I cannot for the life of me figure out how to add the user to the model form. What I have in my views.py file (below) is the closest I have been able to get. Models class Profile(models.Model): user = models.ForeignKey( get_user_model(), on_delete = models.CASCADE ) first_name = models.CharField(max_length = 200, blank = True) last_name = models.CharField(max_length = 200, blank = True) dob = models.DateField(blank = True) profile_photo = models.ImageField(upload_to = 'profile_photos/', blank = True) def __str__(self): return self.first_name def get_absolute_url(self): return reverse('home') Views class ProfileCreateView(LoginRequiredMixin, generic.CreateView): model = Profile template_name = 'account/profile_creation.html' fields = ['first_name', 'last_name', 'dob', 'profile_photo'] login_url = 'account_login' def form_valid(self, form): user = self.request.user self.object = form.save(commit = False) self.object.save() return super(ProfileCreateView, self).form_valid(form) Forms class CustomProfileForm(forms.Form): class Meta: model = Profile The error I am getting: null value in … -
Is it possible to set django-allauth to accept only google login?
I am implementing a web application using Django framework. In my business I need to let the users have access to the app only by google login. I also don't need to register the users in my database, it isn't a requirement. I just need that the user will uses his google account to enter the site so I will be able to get his real email to send him back the result of the session. It is a one shot app. I am using django-allauth but it exposes by default a way to login and register users locally. Is it a way to disable every kind of local registration/login and let the user enter in the app only by google login? Thank you. -
I want to sent weather conditions sms to the registered users on the website [closed]
I want to send weather condition SMS to the registered users of my website. I have done with the coding but the SMS is not received to the registered users. Please Help me. user_data=extendeduser.objects.values('phone','town','user') def printit(): threading.Timer(10, printit).start() for i in user_data: city = i['town'] src = 'http://api.openweathermap.org/data/2.5/weather?appid=' url = src + city list_of_data = requests.get(url).json() temp = list_of_data['main']['temp'] newtmp = round(temp - 273.15, 3) condition = list_of_data['weather'][0]['description'] humidity = list_of_data['main']['humidity'] data = { "city": city, "temp": newtmp, "humidity": humidity, "condition": condition, "icon": str(list_of_data['weather'][0]['icon']), } print(data) if data['condition']=="overcast clouds": euser = extendeduser.objects.values('phone', 'user') url = "https://www.fast2sms.com/dev/bulk" querystring = { "authorization": "Authorization Code", "sender_id": "Annadata", "message": "Overcast Clouds ", "language": "english", "route": "p", "numbers": phone} headers = { 'cache-control': "no-cache" } response = requests.request("GET", url, headers=headers, params=querystring) print(response.text) print('\n'+city,' user '+str(i['user'])+' overcast condition',end='\n') printit() -
Generate barcode render to template HTML in django
I need to generate barcode in django to view in html for generate PDF particularly scan the generate barcode -
Dev server Django do not run [closed]
Sorry, I need hepl. I try make first django app with guide in your site. Virt. env is started and activated, but dev server not started. comand "python manage.py runserver" returned error "No module 'mysite'" Why???? -
Object placement of app that contains provider which stores all the state (React)
I'm trying to make an authentication on django-react web and came across this tutorial on youtube https://www.youtube.com/watch?v=BxzO2M7QcZw&t=2907s There is an object called app that contain provider which wrap a components and define a store. In that tutorial, app is called inside render function in index.js file. Below is the code const app = ( <Provider store={store}> <App /> </Provider> ) ReactDOM.render(app, document.getElementById('root')); registerServiceWorker(); I'm trying to follow this tutorial but i have a different format of index.js because i create all my routing path inside it while the tutorial create the route inside app.js. My question is, where should i put the app object if i have a code like this inside my index.js file? const composeEnhances = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose const store = createStore(reducer, composeEnhances( applyMiddleware(thunk) )); const app = ( <Provider store={store}> <Homepage></Homepage> <SportsSearch></SportsSearch> </Provider> ) const sports_dict = ['futsal', 'badminton', 'basket', 'sepak-bola', 'voli', 'tenis', 'billiard', 'tenis-meja'] render( <BrowserRouter> <Routes> <Route path="/" element={<Homepage />} /> <Route path="/R1" element={<RecommendationOne />} /> {sports_dict.map(sport => { return ( <Route path={`/${sport}`} element={<SportsSearch variable={sport} />} /> ) })} </Routes> </BrowserRouter>, document.getElementById("root") ); I have tried to put my app inside render but i get an error of Error: Target container is not a … -
Calling values from formA to formB in Django
I am new to Django and I am stuck at a certain problem which I believe to be not that complicated or even simple for some. Here it goes: In views.py, I have declared two methods/function namely, formA and formB, now I wanted to get a variable "username" in formA and automatically place it in the first cell in formB. How can I achieve this, here is the part of that code. By the way, everything is working for now, all I wanted is to pull that particular data. def formA(request): #form A is the User model built-in in Django if request.method == "POST": form_A = myFormA(request.POST) if form_A.is_valid(): form_A.save() else: form_A = myFormA() return render(....) def formB(request): #formB is a custom form that I made. if request.method == "POST": form_B = myFormB(request.POST) if form_B.is_valid(): form_B.save() else: form_B = myFormB(form_B = myFormB(initial={'username':request.user.username})) # this is the part where I am having problems with. return render(....) -
Django path converters not working as expected:
this is my url: URL: https://aws.s3.temp.com/st123/1321******12333123 And this is my path: path('pdf/viewer/<path:path>/', pdf.viewer, name="viewer"), This is my view: def viewer(request, path): context = {'path':path} return render(request, 'pdf_viewer.html', context) When i try to pass a url via this, am getting a wired result. Thus when i pass a url, its trimming up the forward slashes into one. OUTPUT: https:/aws.s3.temp.com/st123/1321******12333123 // check the https doesn't have two slashes But the expected output is https://aws.s3.temp.com/st123/1321******12333123 Why one single forward slash is getting removed ? And this happens only in production server but working correctly in localhost. Please help -
Celery task will not execute in django
I am leraning Django using django 3 by example. I want to launch asynchronous task with celery. I set the settings but the task will not execute. i'm using rabbit mq as broker and i'm using windows. Here is my code: celery.py import os from celery import Celery # set the default Django settings module for the 'celery' program. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Onlineshop.settings') app = Celery('Onlineshop') app.config_from_object('django.conf:settings', namespace='CELERY') app.autodiscover_tasks() init.py from .celery import app as celery_app __all__ = ('celery_app',) tasks.py from celery import shared_task from django.core.mail import send_mail from .models import Order @shared_task def order_created(order_id): """Task to send an e-mail notification when order is successfully created.""" order = Order.objects.get(id=order_id) subject = f'Order nr. {order.id}' message = f'Dear {order.first_name},\n\n' \ f' You have successfully placed an order.' \ f'Your order ID is {order.id}' mail_sent = send_mail(subject, message, 'admin@onlineshop.com', [order.email]) return mail_sent views.py from django.contrib.auth.decorators import login_required from django.shortcuts import render from .models import OrderItem from .forms import OrderCreateForm from cart.cart import Cart from .tasks import order_created # Create your views here. @login_required def order_create(request): cart = Cart(request) if request.method == 'POST': user = request.user form = OrderCreateForm(request.POST) if form.is_valid(): order = form.save(commit=False) order.user = user order.save() for item in cart: OrderItem.objects.create(order=order, product=item['product'], price=item['price'], … -
How to use google drive api in django for authentication and file storage?
How can I use google drive api as authentication as well file storage in django? I want to save files that they upload to their own google drive -
'AnonymousUser' object has no attribute '_meta' in Django
I am writing a website and when the user logs in, I get this error - 'AnonymousUser' object has no attribute '_meta'. How do I fix it? Here is a structure of my project: │ db.sqlite3 │ manage.py │ ├───ithogwarts │ │ asgi.py │ │ settings.py │ │ urls.py │ │ wsgi.py │ │ __init__.py │ │ │ └───__pycache__ │ ├───main │ │ admin.py │ │ apps.py │ │ models.py │ │ tests.py │ │ urls.py │ │ views.py │ │ __init__.py │ │ │ ├───migrations │ │ │ __init__.py │ │ │ │ │ └───__pycache__ │ │ │ ├───static │ │ └───main │ │ ├───css │ │ │ footer.css │ │ │ header.css │ │ │ index.css │ │ │ │ │ ├───img │ │ │ │ │ └───js │ │ script.js │ │ │ ├───templates │ │ └───main │ │ index.html │ │ layout.html │ │ level_magic.html │ │ │ └───__pycache__ │ ├───templates │ └───registration └───users │ admin.py │ apps.py │ forms.py │ models.py │ tests.py │ urls.py │ utils.py │ views.py │ __init__.py │ ├───migrations │ │ 0001_initial.py │ │ __init__.py │ │ │ └───__pycache__ │ ├───static │ └───users │ └───css │ login.css │ register.css │ ├───templates … -
NOT NULL constraint failed: reg_scientificinfo.user_id
Im trying to make a detailview that lets staff users update regulare users information. this is my models: class ScientificInfo(models.Model): id = models.AutoField(primary_key=True) user = models.ForeignKey(User, on_delete=models.CASCADE) info1 = models.CharField(max_length=64, choices=SURVEY_CHOICES) info2 = models.CharField(max_length=64, choices=SURVEY_CHOICES) info3 = models.CharField(max_length=64, choices=SURVEY_CHOICES) and views: class ScientificInfoView(FormMixin, DetailView): model = ScientificInfo template_name = 'reg/scientific-info.html' form_class = ScientificInfoForm def get_success_url(self): return reverse('scientific-info', kwargs={'pk': self.object.id}) def get_context_data(self, **kwargs): context = super(ScientificInfoView, self).get_context_data(**kwargs) context['form'] = ScientificInfoForm(initial={'post': self.object}) return context def post(self, request, *args, **kwargs): self.object = self.get_object() form = self.get_form() if form.is_valid(): return self.form_valid(form) else: return self.form_invalid(form) def form_valid(self, form, *args, **kwargs): form.save() return super(ScientificInfoView, self).form_valid(form) but when I try to submit the form it gives me this error: NOT NULL constraint failed: reg_scientificinfo.user_id