Django community: RSS
This page, updated regularly, aggregates Django Q&A from the Django community.
-
Overriding Django ModelForm save method and deleting old values(files)
I have a model and a ModelForm from the model mentioned. The model has an image field among others. As I update an instance of the model using the ModelForm, if the image field has been updated, I want the old file to be deleted. So I override the save method on the ModelForm. However, I am getting an unexpected outcome. When the image field is updated, if there NO was a file previously, the new one is saved perfectly. But when there WAS a file previously, it does get stored in the file system but it's not saved to the instance. Thus the image field becomes empty. The model example class Article(models.Model): title = models.CharField(max_length=200) cover_image = model.ImageField() The Form from django.core.files.uploadedfile import InMemoryUploadedFile from django.db.models.fields.files import ImageFieldFile, FileField class ArticleModelForm(forms.ModelForm): class Meta: model = Article fields = '__all__' def save(self, commit=True): object = super().save(commit) # Clean out the old files for key in self.changed_data: new_value = self.cleaned_data.get(key) if new_value and isinstance(new_value, InMemoryUploadedFile): old_value = self.initial.get(key) if old_value and (isinstance(old_value, FileField) or isinstance(old_value, ImageFieldFile)): old_value.delete() return object On the override save method what I did is loop through all changed data and do the following; Get the new value … -
How to migrate models when I django test with parallel option?
When I tried to test with parrallel option(--parallel=3), all models migrated in only one database. (I expected that models migrated in all databases. How can I fix it? I tried to run: python manage.py test --settings=server.settings.test --parallel=3 I got Error: django.db.utils.ProgrammingError: (1146, "Table 'test_xxx_1.company' doesn't exist") -
Migrating Bcrypt from PHP to Django
I am migrating a PHP backend to Django and I don't wanna make users change their passwords. In PHP I'm using Bcrypt, which uses version 2y, while Django uses 2b, making it incompatible. I've read other solutions where people write a whole new hasher, but that seems too difficult. My solution was to override the check_password() function of my User model: def check_password(self, raw_password): def setter(): pass alg_prefix = 'bcrypt_php' if self.password.startswith(alg_prefix): return bcrypt.checkpw(bytes(raw_password, 'utf-8'), bytes(self.password[len(alg_prefix):], 'utf-8')) else: return super().check_password(raw_password) And to save old passwords adding bcrypt_php in the beginning. The question is: Is it dangerous to do this? Am I putting my passwords or my system in danger? -
Create a lookup in django
I Have an accounts table with account number and account name in a model called accounts how do I create a lookup such that whenever I enter an account number in django template, account name get populated automatically -
Django not deleting session id in mongoDB database when logging out
I have integrated the MongoDB database with CVAT. I get "Could not login" Error when I try to login second time into CVAT portal. I get below error in browser console (full error screenshot attached) "FAILED SQL: INSERT INTO "auth_user_groups" ("user_id", "group_id") VALUES (%(0)s, %(1)s)" I know that this is because django has not deleted the session id in database in auth_user_groups collection for first time login-logout. How can I fix this issue and make sure I will be able login-logout multiple times without having to manually delete session id in mongoDB ,auth_user_groups collection. [ -
Modifying the path of an already uploaded file to S3 using the Django ORM
My goal is to change the path (not the base one) in which our file history is located in S3, for example from a script. They are files that are referenced by models of a Django application through FileField fields. And I don't know how to do it consistently. More in detail: now all the file history is in the media directory of the bucket, and we want to reorganize this directory by user and other fields to keep the file system in order. For new files, I have read that you can easily specify a custom path through the upload_to parameter, but I don't know how to do it with old files. How can I move an already uploaded file to S3 using the Django ORM? Thank you! -
Getting NOT NULL constraint failed: locations_location.city_id in DRF
When I try to create an object through DRF serailizers in my api, I get the error NOT NULL constraint failed: locations_location.city_id. I looked at a similar here and the solution provided seems to be exactly what I had to begin with. My models: class City(models.Model): code = models.CharField(max_length=4, default="", blank=False, unique=True) name = models.CharField(max_length=40, default="", blank=False, unique=True) time_added = models.DateTimeField(auto_now_add=True) def __str__(self): return f"{self.name}, ({self.code})" class Meta: verbose_name = "City" verbose_name_plural = "Cities" class Location(models.Model): status_choice = ( ("Available", "Available"), ("Unavailable", "Unavailable"), ("Active", "Active"), ) city = models.ForeignKey(City, on_delete=models.CASCADE, related_name="locations") name = models.CharField(max_length=256, default="", blank=True) rent = models.DecimalField(max_digits=7, decimal_places=2) email = models.EmailField(max_length=64) phone = models.CharField(max_length=20, default="", blank=True) lon = models.DecimalField(max_digits=7, decimal_places=5, blank=True, null=True) lat = models.DecimalField(max_digits=7, decimal_places=5, blank=True, null=True) street_number = models.CharField(max_length=50, null=True) street_name = models.CharField(max_length=50, null=True) postal_code = models.CharField(max_length=50, null=True) status = models.CharField(max_length=50, choices=status_choice, default="Available") time_added = models.DateTimeField(auto_now_add=True) def __str__(self): return f"{self.name} {self.status}" My serailizers: class CitySerializer(serializers.ModelSerializer): locations = serializers.PrimaryKeyRelatedField(many=True, read_only=True) class Meta: model = City fields = "__all__" def create(self, validated_data): return City.objects.create(**validated_data) class LocationSerializer(serializers.ModelSerializer): location_events = serializers.PrimaryKeyRelatedField(many=True, read_only=True) booked_days = serializers.PrimaryKeyRelatedField(many=True, read_only=True) class Meta: model = Location fields = "__all__" depth = 1 def create(self, validated_data): city = serializers.PrimaryKeyRelatedField( # noqa many=False, queryset=City.objects.all() ) return Location.objects.create(**validated_data) … -
Preload a yolo model in AppConfig Django (Attemped to use a closed Session)
So i have a model for object detection using YOLO3 , and im trying to optimize it , it takes 10 seconds to load the model and then he start the object detection, so i tried to preload the model in apps.py , and pass it to the function that need the model , but im getting Attemped to use a closed Session from tensorflow , is there is a way to close a session in another place from where the model is loaded ? actually thats waht im doing . apps.py from django.apps import AppConfig import snakeimage.classification_codes.classification_codes.pre_loading as pre import tensorflow init_tf = None class SnakeimageConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'snakeimage' def ready(self): with tensorflow.compat.v1.Session(): print("im ready !!") global init_tf init_tf = pre.loading_model() and im using the global variable in this function : import snakeimage.apps as si import tensorflow def detection_task(image_path): obj_det_res = snake_obj_detection(image_path , si.init_tf) print(obj_det_res) return obj_det_res maybe their is another way to do it in a cleaner way , so told me if im wrong . -
Why Python Anywhere // Django does not allow over 100 entries into a model?
I am currently hosting a Django// Python App on PythonAnywhere and this app contains list-like forms where the user can enter electricity and water readings for complexes. One of these forms has 264 lines (forms) on the page however when the user reaches 100 entries, the page does not allow for any more. Does anyone know why this happens or how to fix it? We are using a SQLite3 database for this date -
is there any way to import "timedelta_seconds" from "celery.utils.timeutils" or any other library in Django==3.1.13?
enter image description here I am migrating (upgrading) the code to newer version of python==3.8.10 and django==3.1.13 there is a import startment and the erorr I am facing, I am not able to import the 'timedelta_seconds' from "celery.utils.timeutils", I need to solve this as,I have some dependencies on my older version of the code. thanks. -
How to apply two models to one view?
I have 2 models Goods and Number models and I need to apply those models to IndexView. I would be pleased to know how this can be done in my code sorry for english. this is code of views.py from django.views import generic from django.utils import timezone from .models import Question from .models import Goods from .models import Number class IndexView(generic.ListView): template_name = 'Homepage/index.html' model = Goods context_object_name = 'goods' def description(self): return self.description_text def price(self): return self.price_text class NumbersView(generic.ListView): template_name = 'Homepage/index.html' model = Number context_object_name = 'numbers' def number1(self): return self.number1_text def number2(self): return self.number2_text this is code of models.py class Goods(models.Model): description_text = models.CharField(max_length=200) price_text = models.CharField(max_length=200) image_sale = models.ImageField() def __str__(self): return self.image_sale def __str__(self): return self.description_text def __str__(self): return self.price_text class Number(models.Model): number1_text = models.CharField(max_length=200) number2_text = models.CharField(max_length=200) def __str__(self): return self.number1_text def __str__(self): return self.number2_text -
How to pass conditional attributes to template in Django ListView
I'm trying to make a list of employees that each day contains information ("today_note") if they are present at work or are sick. I had no problem to do this in Flask, I simply rendered a template as below: def employees_list(): all_employees = Employee.query.order_by(Employee.name).all() today = date.today() for employee in all_employees: today_sick = db.session.query(SickLeave).filter(SickLeave.start_date <= today).filter( SickLeave.end_date >= today).filter(SickLeave.person_id == employee.id).all() if len(today_sick) != 0: employee.today_note = "C" else: employee.today_note = "✓" return render_template("employees_list.html", all_employees=all_employees) and could access today_note for each employee in the template: {% for employee in all_employees %} {{ employee.today_note }} {% endfor %} Now I need to do the same in django. I can't figure out how to pass today_note to each instance of User model to be able to display it in the template. class AllEmployeesList(ListView): template_name = "users/all_employees.html" model = User context_object_name = 'employees' def get_context_data(self, **kwargs): context = super(AllEmployeesList, self).get_context_data(**kwargs) all_employees = User.objects.all() today = date.today() for employee in all_employees: today_sick = Sickleave.objects.filter(Q(start_date__lte=today)&Q(end_date__gte= today)&Q(employee__id=employee.id)).all() if len(today_sick) != 0: employee.today_note = "C" else: employee.today_note = "✓" return context I'm aware that here I completely miss reference to context -
Get number of objects in serializer where foreign key field is x
Suppose class ABC(models.Models): ... id = models.SlugField(...) user = models.ForeignKey(settings.AUTH_USER_MODEL) ... Now i want something like [{id: adfsdd, no_of_user_objects: 5}, {id: gdfvsdf, no_of_user_objects: 0}, {id: ergthf, no_of_user_objects: 2}] How do i achieve this? -
DJANGO: How to stop the first function when the second function is called?
I have called the first "a1" function and it's starts running in the loop and when I called the second "a2" function, the first "a1" function supposed to stop and second function has to start running, but the two functions are running parallelly. I need to stop the first function when the second function is called. Please help def a1(request): if request.method == "POST": add = request.POST['addition'] while True: add = add + 1 print(add) time.sleep(2) return render(request, blog/finished.html) def a2(request): if request.method == "POST": check = request.POST['checking'] while True: print(check) print("second function: ",check) time.sleep(2) return render(request, blog/finished.html) -
What is the difference between using django signals and calling a method?
I am trying to implement a function which sends a notification to all employee records whenever a new document record is published. In the models, I still needed to import the receiver function because my sender model lives in a different project: receiver function (lives in a different app in project): def new_document_version_published(sender, instance, **kwargs): print("New version of document published!") print(sender) print(instance) # Get all employees employees = [] # Send notifications to employees buttons = [NotificationButton(button_text="New version of document", value="Ok", style="primary")] notifyUsers("A new version of the document has been published", buttons, employees, []) sender (lives in a different app in project): from django.db.models.signals import post_save from api.views import new_document_version_published class DocumentVersion: ... def save(self, *args, **kw): if self.pk is not None: orig = DocumentVersion.objects.get(pk=self.pk) if orig.date_published != self.date_published: print('date_published changed') notify_employees() if orig.date_approved != self.date_approved: print('date_approved changed') super(DocumentVersion, self).save(*args, **kw) def notify_employees(): post_save.connect(new_document_version_published, sender=DocumentVersion) I know there is something wrong with my implementation because I don't understand what is the difference between using the signal and just importing and calling the receiver function. All help appreciated! -
Nested one-to-many relationship sqlalchemy filtering
I'm trying to filter nested one-to-many relationship in sqlalchemy, but it gives the filter only in the inner join ( second one), how Can I specify the filter in the outer join not the internal one? I have one-to-many school -->classes one-to-many class -> student I'm trying to get all the students in specific school, in specific class Models.py class School(Base): __tablename__ = 'schools' id = Column(Integer, primary_key=True) name = Column(String) # # Relationship for one-many - parent of classes classes = relationship("Class") def __repr__(self): return "<School(name='%s')>" % self.name class Class(Base): __tablename__ = 'classes' id = Column(Integer, primary_key=True) name = Column(String) # foreign Key for the parent - child of school school_id = Column(Integer, ForeignKey('schools.id')) # Relationship for one-many - parent of students students = relationship("Student") def __repr__(self): return "<Class(name='%s')>" % self.name class Student(Base): __tablename__ = 'students' id = Column(Integer, primary_key=True) name = Column(String) fullname = Column(String) nickname = Column(String) # foreign Key for the parent - child of school class_id = Column(Integer, ForeignKey('classes.id')) def __repr__(self): return "<Student(name='%s', fullname='%s', nickname='%s')>" % ( self.name, self.fullname, self.nickname) the query is info = session.query(SchoolModel). \ options(subqueryload(SchoolModel.classes).subqueryload(ClassModel.students)). \ filter(SchoolModel.id == parent_lookup_class__student). \ filter(ClassModel.id == parent_lookup_class). \ filter(StudentModel.id == pk). \ first() The output is … -
ValueError at /polls/add/ The view polls.views.addQuestion didn't return an HttpResponse object. It returned None instead
I am trying to pass data from html template to django addQuestion view in my polls app.I want to make an add quetion along their vote options template and I am using django==3.2 Here my html code <form action="{% url 'polls:add' %}" method="post"> {% csrf_token %} <label for="your_queston">Question: </label> <input id="question" type="text"> <br> <label for="choices">Choice 1</label> <input id="choice1" type="text"><br> <label for="choices">Choice 2</label> <input id="choice2" type="text"> <br> <label for="choices">Choice 3</label> <input id="choice3" type="text"> <br> <input type="submit" value="add"> </form> and here my addQuestion function in view.py def addQuestion(request): if(request.POST): try: if(request.POST['question']): qtext = request.POST.get('question') q = Question(question_text=qtext, pub_date=timezone.now()) q.save() if(request.POST['choice1']): q.choice_set.create( choice_text=request.POST.get('choice1'), votes=0) if(request.POST['choice2']): q.choice_set.create( choice_text=request.POST.get('choice2'), votes=0) if(request.POST['choice3']): q.choice_set.create( choice_text=request.POST.get('choice3'), votes=0) q.save() return HttpResponseRedirect(reverse('polls:index')) except: pass else: return render(request, 'polls/addQuestion.html') -
No able to save data in django model without any error
below mentioned are code complete details I have tried everything and also applied methods available on the internet but the problem still continues. I did not get any errors while submitting the form. Model: class Subscriber(models.Model): id = models.BigAutoField(primary_key=True) email = models.EmailField(null=False, default=1) date = models.DateTimeField(auto_now_add=True) View: from .models import Subscriber def subscriber_view(request): if request.method == 'POST': email = request.POST.get('email') subscriber = Subscriber(email=email) subscriber.save() return render(request, 'homepage') urls.py path('', views.subscriber_view, name='subscriber'), base.html {% load static %} <div class="footer-newsletter"> <div class="container"> <div class="row justify-content-center"> <div class="col-lg-6"> <h4>Join Our Newsletter</h4> <p>Tamen quem nulla quae legam multos aute sint culpa legam noster magna</p> <form method="POST" action="{% url 'subscriber' %}" id="subscriber" role="form" novalidate="novalidate" > {% csrf_token %} <input class="form-control" id="email" placeholder="Email Address" type="email" name="email"> <input type="submit" value="Subscribe"> </form> </div> </div> </div> </div> -
"Authentication credentials not provided" issue when using Nextjs server side rednering
I am using Nextjs as my frontend and Django as a backend server. I have configured django and Nextjs to run under the same domain and I was able to use django default session based authentication from my nextjs application. After logging in when I make a request from client side using Nextjs the request works perfectly since the Nextjs request is sending the sessionid cookie to the django server. The issue comes when I try to use NextJs server-side rendering. When I try to send a request from getServerSideProps in Nextjs django responds with "Authentication credentials not provided" I want to send request to my django server from getServerSideProps function for SEO What should I do to solve this issue. Thanks in advance. -
How do I preserve previous data when deleting new columns or deleting exists table in Django models?
I am developing an ERP with groups of developers and we need to preserve customers data when deleting existing columns or table for Dajngo models and DB. For Example: I added a column named columns1 and I gave the customer a release product of the System and then, but a week later I had to delete that new column but the customer have data stores in the column1 column, here how can I preserve data or solve this situation. Another Example: I have a new column name column2 with unique attr but here the customer have data, but I can not add new column with out allowed it to store the null data, but in this situation I not want to allow null data in column column2 and I can't put default attr because it has unique attr. How to solve these things in Django. -
How do I add a class to a custom widget?
I've defined the following custom widget in forms.py, which over rides the standard HTML to create a "live search" select menu (user can enter free text to search options, useful when there are many options). For this widget to work, the class="selectpicker" class must be applied. How do I apply this class at the widget level? class LiveSelectWidget(forms.widgets.Select): template_name = "widgets/live_select.html" option_template_name = 'widgets/live_select_option.html' -
How to update through model in django many to many?
class Blog(): likes = models.ManyToManyField(User, through="myapp.Like") class Like(): user = models.ForeignKey(Like) blog = models.ForeignKey(Blog) liked_at = models.DateTimeField(auto_now_add=True) some_bool_field = models.BooleanField(default=False) Now in views: def like_blog(request, id): blog = Blog.objects.get(id=id) blog.users.add(request.user) # now how can I update some_bool_field and How can I make use of this field In future I can use some query like blog.users.filter(some_bool_field=False) so for that case I want to update this field. -
Django - ServiceWorker, Uncaught (in promise) TypeError: Failed to execute 'addAll' on 'Cache': Request failed
I want to use ServiceWorker of javascript to cache an HTML file for offline view. But problem is I have a django application. and I don't know how can I specify my template files in service-worker.js. I specified a URL for service-worker.js in my urls.py like this - path('service-worker.js', (TemplateView.as_view(template_name="menu/service-worker.js", content_type='application/javascript', )), name='service-worker.js') this is my index.html template file - <script> if('serviceWorker' in navigator) { let registration; const registerServiceWorker = async () => { registration = await navigator.serviceWorker.register("{% url 'service-worker.js' %}"); }; registerServiceWorker(); } </script> everything working great so far. this is my service-worker.js const cacheName = 'my-cache'; const filesToCache = [ "/index.html", ]; self.addEventListener('activate', e => self.clients.claim()); self.addEventListener('install', e => { e.waitUntil( caches.open(cacheName) .then(cache => cache.addAll(filesToCache)) ); }); self.addEventListener('fetch', e => { e.respondWith( caches.match(e.request) .then(response => response ? response : fetch(e.request)) ) }); I'm getting this error Uncaught (in promise) TypeError: Failed to execute 'addAll' on 'Cache': Request failed and I know this is because index.html file is not found and returning 404 error. but I don't have any idea how should I specify the template file here. can anyone please help me with how should I import template files in service-worker. or I may have some totally different … -
Custom authentication middleware for specific routes in Django
I implemented a custom authentication setup for my Django project. There are some user roles for users. Now I want to ensure that some specific routs may acceptable only of specific user roles. Let's say the edit/uploaded-files can be acceptable only for the user with role = 1. So I created a middleware for that. from django.shortcuts import redirect class HRMiddleware(object): def process_request(self, request): user = request.user if not (user and user.is_authenticated() and user.email): return redirect('') if user.role_id.id != 1: raise 403 return None Now how can i apply this middleware for some specific routes only ? I found some solutions like using decorator @decorator_from_middleware(MyMiddleware) and specifying the routes in middle ware. Is there any better way to do this ? Actually I am a Laravel developer. This is my first Django project. In laravel we can specify the middlewares in the routes. Please help me -
Cannot assign "<User: shakil>": "Comment.comment_user" must be a "Profile" instance
models.py from django.contrib.auth.models import User class Profile(models.Model): name = models.OneToOneField(User,on_delete=models.CASCADE,related_name='user') bio = models.CharField(max_length=300) photo = models.ImageField(upload_to='images/profile_photos/') def __str__(self): return self.name.username class Comment(models.Model): comment_user = models.ForeignKey(Profile, on_delete=models.CASCADE) comment_text = models.TextField(blank=True) todo = models.ForeignKey(Todo, on_delete=models.CASCADE,related_name='comment') created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) active = models.BooleanField(default=False) def __str__(self): return self.comment_text +" "+ self.comment_user.name.username serializers.py class CommentSerializer(ModelSerializer): comment_user = serializers.StringRelatedField(read_only=True) class Meta: model = Comment exclude = ('todo',) #fields = "__all__" views.py class CommentCreateApiView(generics.CreateAPIView): serializer_class = CommentSerializer #permission_classes = [TodoCreatorOrReadOnly] # def get_queryset(self): # return Comment.objects.all() def perform_create(self, serializer): id = self.kwargs['todo_id'] todo_item = Todo.objects.get(pk=id) user_comment = self.request.user print(user_comment) comment_query = Comment.objects.filter(todo=todo_item,comment_user__name__username=user_comment).exists() if comment_query: raise ValidationError('User Comment is already exist..!') else: serializer.save(todo=todo_item,comment_user=user_comment) errors File "D:\python_projects\todo_project\venv\lib\site-packages\django\db\models\fields\related_descriptors.py", line 215, in __set__ raise ValueError( ValueError: Cannot assign "<User: shakil>": "Comment.comment_user" must be a "Profile" instance. I have tried several times to comment on a specific todo item. A single authenticated user can write one comment on a single todo item. When I have been sending a post request the response shows Cannot assign "<User: shakil>": "Comment.comment_user" must be a "Profile" instance. I guess the problem occurs inside below the line: serializer.save(todo=todo_item,comment_user=user_comment)