Hi, François-Xavier I believe that the reason of that is a transaction that is not committed yet when your code reaches 'post_save' listener. And when you use 'requests' library there is nothing in the DB yet.
And I am just curios why there is a need of saving 'admin view' in the DB? Regards, Constantine C. On Tue, May 16, 2017 at 10:17 PM, François-Xavier Cao <[email protected]> wrote: > Hi everone, > > > I started to code a two-apps django project. ModelA belongs to appone and > ModelB belongs to apptwo. My purpose is to create a ModelA instance > everytime that the user creates a ModelB instance. And the value of a > ModelA CharField (that is ckeditor widgeted) must be the source code of a > ModelB admin view. I used a post_data signal to link a function of creation > for that. The problem is that i use the id of each instance of ModelB in > order to create the good content for each instance of ModelA. When I try to > use a string of the url sending the id parameter, the content field has for > value the source code of the debug page > > (error 500, DoesNotExist at /admin/apptwo/modelb/my_view/ref=76, [76 is > an example] ModelB matching query does not exist. Exception location : > /home/me/Desktop/env/lib/python3.5/site-packages/django/db/models/query.py > in get, line 385) > > But when I try to visit the url "http://localhost:8000//admin/ > apptwo/modelb/my_view/ref=76", or when I hardcode the url, without a str( > instance.id), the page exists and everything works perfectly. > > I don't understand why. > > Could anybody give me some help to solve this problem ? > > Thanks in advance, > > ------------------------------ > > PS : > > The first app has a model.py that contains the following code : > > > from django.db import models > from django.contrib.auth.models import Userfrom registre.models import * > class ModelA(models.Model): > content = models.CharField(max_length=255, null=True) > def __str__(self): > return "ModelA : " + str(self.id) > > > > > the admin.py of this first app also contains : > > > from django.contrib import admin > from appone.models import * > from apptwo.models import ModelB > from django.http import HttpResponse > from django.template.response import TemplateResponse > from django.conf.urls import url > from registre import views > from django.db.models.signals import post_save > from django.dispatch import receiver > import datetime > from django.contrib.auth.models import User > from django import forms > from ckeditor.widgets import CKEditorWidget > from django.template.loader import render_to_string > import requests > > class ModelAAdminForm(forms.ModelForm): > content = forms.CharField(widget=CKEditorWidget()) > class Meta: > model = ModelA > fields = '__all__' > > class ModelAAdmin(admin.ModelAdmin): > form = ModelAAdminForm > > def create_A(sender, instance, **kwargs): > string = "http://localhost:8000/admin/apptwo/modelb/my_view/ref=" + > str(instance.id) > r = requests.get(string) > ModelA.objects.create(contenu=r.text.encode('utf-8')) > > post_save.connect(create_A, sender=ModelB) > > admin.site.register(ModelA, ModelAAdmin) > > > > > > the second app (apptwo) has a models.py like this : > > > > from django.db import models > from django.contrib.auth.models import User > > class ModelB(models.Model): > owner = models.ForeignKey(User, null=True) > name = models.CharField(max_length=255, null=True) > > def __str__(self): > return self.name > > > > > and an admin.py that contains : > > > > from django.contrib import admin > from appone.models import * > from apptwo.models import * > import datetime > from django.conf.urls import url, include > from django.template.response import TemplateResponse > > class ModelBAdmin(admin.ModelAdmin): > > def get_queryset(self, request): > qs = super(ModelB, self).get_queryset(request) > if request.user.is_superuser: > return qs > return qs.filter(owner=request.user) > > def save_model(self, request, obj, form, change): > obj.owner = request.user > obj.save() > > def get_urls(self): > urls = super(ModelBAdmin, self).get_urls() > my_urls = [ > url(r'^my_view/ref=(?P<id>\d+)$', self.my_view), > ] > return my_urls + urls > > def my_view(self, request, id): > context = dict( > self.admin_site.each_context(request), > selector = ModelB.objects.get(id=id), > ) > return TemplateResponse(request, "myview.html", context) > > admin.site.register(ModelB, ModelBAdmin) > > > > > > > > and finally a template myview.html with : > > > <p>Test {{ selector.name }}</p> > > -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at https://groups.google.com/group/django-users. > To view this discussion on the web visit https://groups.google.com/d/ms > gid/django-users/c146a55b-12ed-47d8-8bcb-7b5fc405b739%40googlegroups.com > <https://groups.google.com/d/msgid/django-users/c146a55b-12ed-47d8-8bcb-7b5fc405b739%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- Sincerely yours, Constantine C -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAK52boX30qoZv01rkgTimHXw5GNarMpHRsjz5MAiSvE3cE91Rw%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.

