Django community: RSS
This page, updated regularly, aggregates Django Q&A from the Django community.
-
DRF 'create' method deletes fields from 'validated_data'
I want to realize POST method to create Article object. I have to provide this body: { "title": "Sample title", "link": "https://www.sample.com/" } And get Article object with auto assigned ID, author_name(current user) and creation_date. But i got an problem - "create" methor deletes one field - author_name. (See code below) Finally i get next error msg: IntegrityError at /api/articles/ Error: Null value in column "author_name_id" with NOT NULL DETAIL: Error row contains (32, Sample title, https://www.sample.com/, 2020-11-08, null). How do i solve my problem? models.py class Article(models.Model): title = models.CharField( name='title', max_length=120, null=False, ) link = models.URLField( name='link', unique=True, null=False, ) creation_date = models.DateField( name='creation_date', default=date.today, null=False, ) author_name = models.ForeignKey( User, on_delete=models.CASCADE, related_name='articles', null=False, ) def __str__(self): return self.title views.py class ArticleView(APIView): def post(request): if request.user.is_authenticated: data = {"author_name": request.user} data.update(request.data) print(request.data) serializer = ArticleSerializer(data=data) if serializer.is_valid(raise_exception=True): serializer.save() return Response(status=201) return Response(status=403) request.data >>> {'title': 'Sample title', 'link': 'https://www.sample.com/', 'author_name': <SimpleLazyObject: <User: admin>>} serializers.py class ArticleSerializer(serializers.ModelSerializer): author_name = serializers.StringRelatedField() class Meta: model = Article fields = "__all__" def create(self, validated_data): print(validated_data) return Article.objects.create(**validated_data) validated_data >>> {'title': 'Sample title', 'link': 'https://www.sample.com/'} -
Django added foreign key migrate legacy objects
I have extended a Django model: class PNotification(models.Model): boolean fields with default=False def get_notifications(): noti = PNotification.objects.create() return noti class Product(models.Model): notification_object = models.ForeignKey(PNotification, on_delete=models.CASCADE, default=get_notifications) Product was extended with a ForeignKey to PNotification. Now I thought with the default attribute Django would create for all legacy Product objects in the Databse a new PNotification object. Unfortunately, all legacy Product objects do not have a ForeignKey to PNotification. How can I give each legacy Product object an initial PNotification object via the ForeignKey field? -
Django with Docker stuck on "Watching for file changes with StatReloader"
I'm trying to use Django with Docker. My Dockerfile: FROM alpine # Environment setup ... # Python3 installation RUN apk add --no cache build-base RUN apk add --no cache python3 python3-dev py-pip RUN apk add --no cache git RUN apk add --no cache libxml2-dev libxslt-dev openldap-dev RUN pip3 install --requirement ${_PROJECT_DIR}/requirement.txt --target ${_VENDOR_DIR} ENV PYTHONPATH ${_PROJECT_DIR}:${_VENDOR_DIR} CMD ["python3", "management/manage.py", "runserver", "0.0.0.0:8000"] I ran: sudo docker build -t django_app . sudo docker run -d django_app sudo docker logs -f <container> And it was stuck on: Watching for file changes with StatReloader I also tried to run sudo docker run -d -p 8000:8000 django_app but got the same result. Some points: There are already exist some topics that describe this problem but all of them use docker-compose (which I don't use). I prefer to use alpine (instead of using python alpine or ubuntu alpine) because I'm limited with space. Should I run sudo docker run -d -p 8000:8000 django_app or without the ports? In the Django's settings.py file, I have: ALLOWED_HOSTS ['*']. Also, without Docker, my application works so I guess it has something to do with Docker's environment and not the Django application. How could I resolve this issue? -
How do I filter media by include and excluded tags using the Django ORM
I have the following models... class Media(models.Model): name = models.CharField(max_length=255) tags = models.ManyToManyField('Tag', blank=True) class Tag(models.Model): name = models.CharField(max_length=255) class Filter(models.Model): name = models.CharField(max_length=255) tags_included = models.ManyToManyField('Tag', blank=True, related_name='included_tags') tags_excluded = models.ManyToManyField('Tag', blank=True, related_name='excluded_tags') def get_media(self): return """ return all media that has any tags_included set and remove all media that has tags_excluded set """ And I am looking for a method of getting a media selection based on a filter of tags that must be included and tags that must not be included. So I guess it must use __in, filter and exclude some how but cant seem to get anything to run. Any help with this would be appreciated, Thanks. -
Django: Queryset aggregating ManyToMany values
I have MyUser model with ForeignKey and ManyToMany related fields city and skills: accounts/models.py class MyUser(AbstractBaseUser): email = models.EmailField() city = models.ForeignKey('jobs.City') skills = models.ManyToManyField('jobs.Skill') jobs/models.py class Skill(models.Model): name = models.CharField() class City(models.Model): name = models.CharField() I need to make a queryset that would return data in this format: {'email': 'some@email.com', 'city': 'London', 'skills': ['Python', 'Java']}, {'email': 'another@email.com', 'city': 'Berlin', 'skills': ['JavaScript', 'C#', 'Python']}, ... MyUser.objects.values('email', 'city__name', 'skills__name') returns all data I need but ManytoMany values returned separately duplicating other entries: {'email': 'some@email.com', 'city': 'London', 'skills': 'Python'}, {'email': 'some@email.com', 'city': 'London', 'skills': 'Java'}, {'email': 'another@email.com', 'city': 'Berlin', 'skills': 'JavaScript'}, {'email': 'another@email.com', 'city': 'Berlin', 'skills': 'C#'}, {'email': 'another@email.com', 'city': 'Berlin', 'skills': 'Python'}, ... So how can I make a queryset aggregating ManyToMany values into one set? -
Why I get error after using 'from django.contrib import admin'
this is my first post asking you for help. I know that I am doing something wrong but I would be very keen on you helping me in solving this problem. I am starting first project in Django That is why I've installed the latest version. I've created django directory. I've created virtualenv. I've installed django. ...and I've got a problem with importing modules from django as below my directories -
Populate empty fields with value from different field
I have a problem with making migrations after changing my model. I changed already exisitnig DateField (lectures_begginning) from null=true to null=false. Now I have to populate old entries. Fortunately I have existing DateField (semester_begginning) which was always set to null=false. Usually these two differ by 4-5 days so I can just copy the semester_beggining. class Semester(models.Model): lectures_beginning = models.DateField( null=False, verbose_name='Class start day') semester_beginning = models.DateField( null=False, verbose_name='Semester start day') How can I change migration so it copies value of semester_beginning to lectures_beginning only if latter is NULL? from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ('courses', '0034_auto_20201106_2039'), ] operations = [ migrations.AlterField( model_name='semester', name='lectures_beginning', field=models.DateField(verbose_name='Dzień rozpoczęcia zajęć'), ), ] -
Why am getting empty array in fetiching data using axios in react js and in urls?
I Created a view for article model and I have the data in my database but when I go on url then it's showing empty array my below code view.py class ArticleView(RetrieveAPIView, RetrieveUpdateAPIView, RetrieveDestroyAPIView): serializer_class = ArticleSerializer permission_classes = [AllowAny] pagination_class = ArticleSizeLimitPagination def get_queryset(self): return Article.objects.filter().order_by('-updated_on') def get_object(self): try: return Article.objects.get(id=self.request.data['id'], is_deleted=False) except Exception: return None def perform_create(self, serializer): return serializer.save(user=self.request.user) def destroy(self, request, *args, **kwargs): try: instance = self.get_object() instance.is_deleted = True instance.save() return Response(data='delete success') except Http404: return Response(status=status.HTTP_204_NO_CONTENT) urls.py urlpatterns = [ path('', ArticleView.as_view()), path('<uuid:pk>/', ArticleView.as_view()), ] When I run the url then HTTP 200 OK Allow: GET, PUT, PATCH, DELETE, HEAD, OPTIONS Content-Type: application/json Vary: Accept { "sub_title": "", "upvote": null, "title": "" } Where did I do wrong? Is there issue in def function for RetrieveAPIView? -
only one button calling ajax in django
So I have a Product Model which I simply use to render the products data into the homepage. I also have ajax code which is called when one of the add to cart buttonat the bottom of each product is pressed it sends the id of the product to a view to add the product to the cart database and it works fine but the problem is it works fine with the first product only. only the first product calls ajax all of the other 7 buttons do not call it. I think it is probably a frontend problem maybe since the front end except for the ajax code isn't mine. Models.py : class ProductModel(models.Model): STATUS_CHOICES = ( ('In stock', 'In stock'), ('Out of stock', 'Out of stock'), ) image = models.ImageField(null=True) lens_image = models.ImageField(null=True) name = models.CharField(max_length=200) small_description = models.CharField(max_length=200, null=True) description = models.TextField() price = models.DecimalField(max_digits=6, decimal_places=2, null=True) status = models.CharField(max_length=12, choices=STATUS_CHOICES, default='In stock') date_created = models.DateTimeField(auto_now_add=True) def __str__(self): return self.name class CartModel(models.Model): customer = models.ForeignKey(User, on_delete= models.CASCADE, related_name="cart") products = models.ManyToManyField(ProductModel) views.py : def home(request): products = ProductModel.objects.all() ctx = {'products': products} return render(request, 'homepage/index.html', ctx) def cart_add(request): try : if request.is_ajax() and request.method == 'POST': print("IT … -
Django inline formset - sort it based on a related model or display forms conditionally?
I have a model Tour which has a foreign key to a model Driver, and another foreign key to a model Timetable. The inline formset in django is created based on Driver and Tour form. I'd like to filter the formset according to the fields in Timetable form (order after group day and time) - the foreign key to this form is supposed to be static and never change, therefore it's not shown in the form. I cannot access the data in Timetable form through a form - is that possible? MODELS class Timetable(models.Model): route = models.AutoField(primary_key=True) group = models.CharField(max_length=1, default='') day = models.DateField(auto_now=False, auto_now_add=False) time = models.TimeField(auto_now=False, auto_now_add=False) class Tour(models.Model): #FK driver = models.ForeignKey(User, default=None, on_delete=models.CASCADE) route = models.ForeignKey(Timetable, default=None, on_delete=models.CASCADE departed = models.DateTimeField(auto_now_add=False) arrived = models.DateTimeField(auto_now_add=False) VIEWS @login_required(login_url="/accounts/login/") def display_all(request): driver = User.objects.get(username = request.user) TourFormSet = inlineformset_factory(User, Tour, fields=('departed', 'arrived'), can_delete =False, extra = 0) if request.method == 'POST': formset = TourFormSet(request.POST, request.FILES, instance=driver) if formset.is_valid(): formset.save() return redirect('app:final') else: formset = TourFormSet(instance=driver) return render(request, 'app/displayall.html', { 'formset':formset }) Alternatively, I tried to display a sorted Timetable table in a template and conditionally show correct forms from the formset. It displays correctly right after, but the formset … -
Django Rest - Create and Action method returns error 403 forbidden
Apologize if this is a newbie question or for using inaccurate terminology. coz I am a newbie. I built a simple Django/React app that allows users to post short texts that can be liked and unliked. In the console I get, POST http://localhost:8000/api/posts/create/ 403 (Forbidden) and POST http://localhost:8000/api/posts/create/ 403 (Forbidden). The REST Framework Renderer gives me, GET /api/posts/create/ HTTP 405 Method Not Allowed Allow: POST, OPTIONS Content-Type: application/json Vary: Accept { "detail": "Method "GET" not allowed." } and, GET /api/posts/action/ HTTP 405 Method Not Allowed Allow: OPTIONS, POST Content-Type: application/json Vary: Accept { "detail": "Method "GET" not allowed." } The console gives me, xhr.send(jsonData) in the components as error. At first I thought it was a simple authentication error but I tried signing in to admin on different browsers to no success. What am I missing here? Any assistance is greatly appreciated. webapp/webapp-web/src/lookup/components.js function getCookie(name) { var cookieValue = null; if (document.cookie && document.cookie !== '') { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = cookies[i].trim(); // Does this cookie string begin with the name we want? if (cookie.substring(0, name.length + 1) === (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + … -
How to make django wizard forms using different templates
I am trying to split one django form to two forms with two different templates. So after googling I found that the solution is using wizard form. Here is my code: in view.py: FORMS = [("0", postform_1stpage), ("1", postform_2ndpage)] TEMPLATES = {"0": "myapp/postform_1stpage.html", "1": "myapp/postform_2ndpage.html"} class ExampleWizard(SessionWizardView): instance = None file_storage = FileSystemStorage(location=os.path.join(settings.MEDIA_ROOT, 'image')) def get_template_names(self): return [TEMPLATES[self.steps.current]] def get_form_instance( self, step ): if self.instance is None: self.instance = Post() #model instance return self.instance def done(self, form_list, **kwargs): """ Save info to the DB """ post = self.instance post.save() return HttpResponseRedirect('home') def get(self, request, *args, **kwargs): try: return self.render(self.get_form()) except KeyError: return super().get(request, *args, **kwargs) def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) if self.request.method == 'POST': secondform = postform_2ndpage(self.request.POST or None, self.request.FILES or None) firstform = {} if secondform.is_valid(): post = secondform.save(commit=False) post.author = self.request.user post.save() messages.success(self.request, f'Post created!') return redirect('home') else: firstform = postform_1stpage() secondform = postform_2ndpage() context = {'firstform':firstform, 'secondform': secondform} return context and in url.py: `path('create/post/new', login_required(ExampleWizard.as_view([ postform_1stpage, postform_2ndpage])), name='new-post')` and finally in templates: {% block content %} <form method="POST" action="create/post/new#details" enctype="multipart/form-data"> <fieldset class="form-group"> {% csrf_token %} {{ firstform.management_form }} <div class="row justify-content-center"> <div class="card-body"> {{ firstform.categories_one }} </div> <div class="card-body"> {{ firstform.categories_two }} </div> <input class="btn btn-xs … -
Can a single django class inherit/extend both ListView and DetailView
Consider following scenario: I have a multi vendor ecommerce website. I want to render three pages: a vendor list, then product list by each vendor, and then details of each of those products So the first Vendors List is a ListView Second, products by each vendors is a DetailView for previous Vendor ListView, but it is a ListView for next product details DetailView Third view renders product details so is obviously a DetailView Now, my question is, Can number 2 extend both the ListView and DetailView? If yes, how? -
Jquery submit event not firing
I am trying to submit a form using jquery. I am running a Django server. The JS Code and HTML are as follows: document.addEventListener('DOMContentLoaded', function() { // Submit comment form document.querySelector('#comment-form').addEventListener("submit", function(event){event.preventDefault()}); document.querySelector('#comment-form').addEventListener('submit', () => save_comment()); }); function save_comment() { console.log('Save function triggered'); frm = document.querySelector('#comment-form'); data_submit = { updated_comment: frm.querySelector('#comment-editbox').value, month: frm.querySelector('#comment-mth').value, gl_code: frm.querySelector('#comment-gl').value, csrfmiddlewaretoken: jQuery("[name=csrfmiddlewaretoken]").val(), }; console.log('Save function triggered 2'); frm.submit(function (e) { console.log('Submit triggered'); e.preventDefault(); $.ajax({ type: frm.attr('method'), url: frm.attr('action'), data: data_submit, success: function (data) { console.log("successful"); }, error: function(data) { console.log("failed"); } }); console.log('save ended'); return false; }); } <!-- The Modal --> <div id="myModal" class="modal"> <!-- Modal content --> <div class="modal-content"> <label id="comment-heading">Comments <span id="comment-subheading"></span></label> <form action="{% url 'comment' %}" method="post" id='comment-form'> {% csrf_token %} <textarea id="comment-editbox" name="comment-editbox"></textarea><br> <input type="hidden" id="comment-mth" name="comment-mth" value=""> <input type="hidden" id="comment-gl" name="comment-gl" value=""> <input class="btn btn-primary" type="submit" value="Save" id='comment-save'> </form> </div> </div> "Save function triggered" and "Save function triggered 2" get logged onto the console when I submit the form. But "Submit triggered" does not. The form does get submitted to the server which returns a json response and causes the form to navigate to the response route. I do not want the form to redirect to the response route … -
How does django really handle multiple requests on development server?
I am making a little django app to serve translations for my react frontend. The way it works is as follows: The frontend tries to find a translation using a key. If the translation for that key is not found, It sends a request to the backend with the missing key On the backend, the missing key is appended to a json file Everything works just fine when the requests are sent one at a time (when one finishes, the other is sent). But when multiple requests are sent at the same time, everything breaks. The json file gets corrupted. It's like all the requests are changing the file at the same time which causes this to happen. I am not sure if that's the case because I think that the file can not be edited by two processes at the same time(correct me if I am wrong) but I don't receive such an error which indicates that the requests are handled one at a time according to this and this Also, I tried something, which to my surprise worked, that is to add time.sleep(1) to the top of my api view. When I did this, everything worked as expected. … -
Django datetime field compered to now
Please help. I have this in my models.py class Notificator(models.Model): headline = models.CharField(max_length=255, default='') vehicle = models.ForeignKey(Vehicle, on_delete=models.CASCADE) start_date = models.DateTimeField() end_date = models.DateTimeField() bought_from = models.ManyToManyField(VigneteSeller, blank=True) start_alert = models.DateTimeField() start_notifying_me = models.IntegerField(default=20) def save(self): d = timedelta(days=self.start_notifying_me) if not self.id: self.start_alert = self.end_date - d super(Notificator, self).save() @classmethod def starter(cls): ready = [] if timezone.now() >= cls.start_alert: ready.append(cls.headline) return ready def __str__(self): return self.headline All I want is to collect all instanceses from "start_alert" field compare it with timezone.now and return it with the starter function, and I am stuck. -
create_user: Unknown Error In Django View
create_user: Unknown error when i use create_user in my user_registery model. my view : def User_Register(request): if request.method == 'POST': form = UserRegisterForm(request.POST) if form.is_valid(): username = form.cleaned_data['UserName'] Email = form.cleaned_data['Email'] Password = form.cleaned_data['Password'] User.objects.create_user(username, Email, Password) else: form = UserRegisterForm() context = { 'register_form' : form } return render(request, 'accounts/register.html', context) def UserLogOut(request): logout(request) messages.success(request,'You Are Log Out', extra_tags='success') return redirect('accounts:user_login_url') my form : class UserRegisterForm(forms.Form): UserName = forms.CharField(label='', max_length=50, error_messages=messages, widget=forms.TextInput(attrs={ 'class' : 'form-group col-md-0.5', 'placeholder' : 'User Name' })) Email = forms.EmailField(label='', max_length=50, error_messages=messages, widget=forms.EmailInput(attrs={ 'class' : 'form-group col-md-0.5', 'placeholder' : 'Email' })) Password = forms.CharField(label='', max_length=50, error_messages=messages, widget=forms.PasswordInput(attrs={ 'class' : 'form-group col-md-0.5', 'placeholder' : 'Password' })) def clean_email(self): email = self.cleaned_data['Email'] user = User.objects.filter(email=email) if user.exists(): raise forms.ValidationError('your email is correct') else: return email and i use clean_email for use valid email addres. -
Using the URLconf defined in fifteen.urls, Django tried these URL patterns
Page not found (404) Request Method: GET Request URL: http://127.0.0.1:8000/ I got error. Using the URLconf defined in vidly.urls, Django tried these URL patterns, in this order: I am getting this error while running manage.py file using command python3 manage.py runserver. Error Using the URLconf defined in fifteen.urls, Django tried these URL patterns, in this order: ^home/$ ^home/search$ admin/ The empty path didn't match any of these. admin.py from django.contrib import admin # Register your models here. apps.py from django.apps import AppConfig class Covid19Config(AppConfig): name = 'covid_19' models.py from django.db import models # Create your models here. tests.py from django.test import TestCase # Create your tests here. urls.py from django.conf.urls import url from covid_19 import views urlpatterns = [ url(r'^home/$',views.greetings), url(r'^home/search$',views.search), ] views.py from django.shortcuts import render from django.http import HttpResponse from selenium import webdriver from selenium.webdriver.common.by import By import matplotlib.pyplot as plt # %matplotlib inline import pandas as pd import time # Create your views here. def greetings(request): res = render(request,'covid_19/home.html') return res def search(request): if request.method == 'POST': state_name = request.POST['search_text'].capitalize() state_code_data = pd.read_csv("state_code.csv") print(state_code_data.head()) state_code = state_code_data.loc[state_code_data['State'] == state_name, 'State_code'].iloc[0] url = "https://www.covid19india.org/state/"+state_code print("state name :",state_name) print("state code :",state_code) print("url :",url) driver = webdriver.Chrome() driver.maximize_window() driver.get(url) time.sleep(6) … -
Setting dynamic label in form field
I have a questionnaire which comprises a list of forms. Each form has only one boolean field. class ModifierForm(forms.Form): applied = forms.BooleanField(label='Trait A', required=True, initial=False) Each time I create a form, I would like to modify the label. In the case above, Trait A is hardcoded. Can this be passed into the form as an argument somehow? Note that the intention is to change the displayed label only. The field name applied remains the same for all form instances. -
TypeError at /admin/auth/user/add/ : __init__() got an unexpected keyword argument 'min_lenght' Django
i have no idea what did i do wrong, I didn't do anything except adding class Userdata(models.Model): user = models.OneToOneField(User, on_delete= models.CASCADE) faculty = models.ForeignKey(Fakultas,on_delete=models.CASCADE,default= 1) is_voted = models.BooleanField(default=False) def __str__(self):return self.user.username in models. then when i tried to add a new user, that error shows everytime -
API access to user's Google data stored in user's Django profile
I'm trying to build a Django where each user has their own profile page. In their profile page, a user can choose to share Google Postmaster data with my website (see https://developers.google.com/gmail/postmaster/reference/rest). Their choice then gets stored in their profile page. I have been playing around with social-auth-app-django but this does not seem able to only function as an extension (with api access) to an existing django profile - it only seems intended to replace the django profile with a social profile. Does anyone have an idea of how to approach this problem? I guess i'm not looking for exact code, but mainly for some steps and perhaps references to tools that are more fitting for my purpose than social-auth-app-django. Thank you, Jon -
Website without https displays file browser
If I visit my website with https:// it works just fine. However, I noticed if I click on the link I put on Github which doesn't have https:// I am taken to a page that says the following: Index of /  Name Last modified Size Description Apache/2.4.38 (Debian) Server at example.com Port 80 I noticed this is an empty directory which I suspected might be /var/www/html so I added a file to it and confirmed this is showing me /var/www/html. This is strange because I have my Django app under /srv -
Ensure field is unique for another field in Django Models
I want a field in a model to be unique based on another field, but not vice versa. For example: class Shipment(models.Model): supplier = models.ForeignKey("Supplier", on_delete=models.PROTECT, related_name='shipments') external_id = models.CharField(max_length=128) I want that two shipments cannot have same supplier and same external_id, but can have same external_id and different supplier, or same supplier and different external_id. I know unique_together. But it makes a supplier to only have one external_id. However, I want a supplier to have multiple external_ids while all of them are unique. I can check this constraint in save() method, but I want a database constraint, or something wiser. -
formset in django gives extra forms rather than specified?
forms.py class PermissionForm(forms.Form): def __init__(self, *args, **kwargs): self.user = kwargs.pop('user') super(PermissionForm, self).__init__(*args, **kwargs) roles = forms.Emailfield() views.py def privileges(request): user=request.user count = 4 PermissionFormSet = formset_factory(PermissionForm, extra=count)) inti = [{'roles':'123@gmail.com'},{'roles':'abc@gmail.com'}] forms = PermissionFormSet(form_kwargs={'user':user}, initial=[x for x in inti]) print(len(forms)) I need to create multiple instance of same form,for that I am using formset.I specified extra=2 and I need to pass different initials for different form instances.So practically,it should give me 2 forms but rather it gives 4 forms.Why? -
Random URL with an expiration date (Django)
The idea is to generate a time limited random URL and send it to an unregistered person. what is the proper way to do it? I'm using Django for a few weeks now and have no clue how to perform it. Thanks