DoesNotExist в /profile/1/ Запрос соответствия профилю не существует

#django

#django

Вопрос:

Мой опыт использования Django ограничен, но я надеюсь, что смогу четко объяснить свою проблему. После успешного входа в приложение, которое я разрабатываю, я перенаправляюсь на страницу пользователя, где у меня есть разные ссылки. Ошибка «DoesNotExist в /profile / 1 / Запрос соответствия профилю не существует». возникает, как только я нажимаю на эти ссылки.

Моя модель выглядит так.

     from django.db import models
    from numpy import array
    from django.db.models import F
    from django.contrib.auth.models import User
    from user.models import Profile

    class Data(models.Model):
        posted_by = models.ForeignKey(User, null=True, on_delete=models.CASCADE)
        profile = models.ForeignKey(Profile, on_delete=models.CASCADE, null=True)
        Product = models.CharField(max_length=20, default="")
        item = models.CharField(max_length=20, null=True)
        quantity = models.IntegerField()
        price = models.IntegerField(default=0)
        total = models.IntegerField(editable=True,blank=True, null=True)
        date_created = date_created = models.DateTimeField(auto_now_add=True, null=True)
    
        def __str__(self):
            return str(self.profile)
    
        def save(self, *args, **kwargs):
            self.total = self.price * self.quantity
            super().save(*args, **kwargs)
    
        @classmethod
        def get_projects(cls):
            projects = Data.objects.all()
            return projects
    
        @classmethod
        def find_projects(cls, search_term):
            project = Data.objects.filter(title__icontains=search_term)
            return project
            
    class Sales(models.Model):
        sales = models.IntegerField(default=0, blank=False, null=False)
        margin = models.IntegerField(editable=True, blank=True, null=True)
        user = models.ForeignKey(Profile,max_length= 20 ,null=False, on_delete=models.CASCADE, related_name='username')
        date_created = date_created = models.DateTimeField(auto_now_add=True, null=True)
        
    
        def __str__(self):
            return str(self.user)
        
        def save(self, *args, **kwargs):
            self.margin = self.sales - Data.objects.get().total
            if self.sales > self.margin:
                
                self.margin =  self.margin
            else:
                -self.margin
            return super().save( *args, **kwargs) 
 

UserModel — это модель профиля, которую я импортирую в модель данных.

 from django.db import models
from django.contrib.auth.models import User
from django.db.models import Avg
from django.db.models.signals import post_save

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, null=True,  related_name="user")
    profile_photo = models.ImageField(upload_to='profiles', null=True)
    bio = models.CharField(max_length=200, null=True)
    phone = models.PositiveIntegerField(default=0)

    def __str__(self):
        return str(self.user)

    def create_user_profile(sender, instance, created, **kwargs):

        if created:
            Profile.objects.create(user=instance)

        post_save.connect(create_user_profile, sender=User)

    def save_profile(self):
        self.save()

    @classmethod

    def get_profile(cls):
        profile = Profile.objects.all()
        return profile
 

В файле MyView есть код, который отвечает за создание профиля.

 def profile(request, id):
    user = request.user
    profile = Profile.objects.get(pk=id)
    projects = Data.objects.filter(id=profile)
    if request.method == "POST":
        profile_id = request.POST.get("user")
        profile_obj = Profile.objects.get(id=profile_id)
        profile_created, created = Data.objects.get_or_create(profile_id, user=user)
    context = {
        "profile":profile, "projects": projects
    }
    return render(request, "index.html", context)
 

Это страница, которая имеет форму, которая будет отображаться после того, как пользователь нажмет на ссылку
myhtmlстраница:

  <div class="container">
          {% if messages %}
          <ul class="msg">
              {% for message in messages %}
              <li  {% if message.tags %} class=" {{ message.tags }} " {% endif %}> {{ message }} </li>
              {% endfor %}
          </ul>
        {% endif %}
        <form action="{% url 'profile'  %}" method= "POST" class="postform" enctype="multipart/form-data">
            
          <fieldset class="setfield">
            <legend class="legend"></legend>
            {% csrf_token %}
            
            {{ form.as_p }}
            <button type="submit" class="btn">Submit</button>
          </fieldset>
        </form>
        </div>
      
MyAppUrls:

 url(r'^


Ответ №1:

Ваш обработчик сигнала post_save объявлен внутри функции, которая должна быть вызвана, поэтому он никогда не будет вызван! Зарегистрируйте его где-нибудь в другом месте, обычно в методе ready класса app: https://docs.djangoproject.com/en/3.1/ref/applications/#django.apps .AppConfig.ready

Комментарии:

1. Спасибо. Позвольте мне попробовать это.

, views.home, name='home'),
url(r'^profile/(?P<id>d)/

Ответ №1:

Ваш обработчик сигнала post_save объявлен внутри функции, которая должна быть вызвана, поэтому он никогда не будет вызван! Зарегистрируйте его где-нибудь в другом месте, обычно в методе ready класса app: https://docs.djangoproject.com/en/3.1/ref/applications/#django.apps .AppConfig.ready

Комментарии:

1. Спасибо. Позвольте мне попробовать это.

, views.profile, name="profile"),
url(r'^new/profile

Ответ №1:

Ваш обработчик сигнала post_save объявлен внутри функции, которая должна быть вызвана, поэтому он никогда не будет вызван! Зарегистрируйте его где-нибудь в другом месте, обычно в методе ready класса app: https://docs.djangoproject.com/en/3.1/ref/applications/#django.apps .AppConfig.ready

Комментарии:

1. Спасибо. Позвольте мне попробовать это.

, views.add_profile, name='add_profile'),

Ответ №1:

Ваш обработчик сигнала post_save объявлен внутри функции, которая должна быть вызвана, поэтому он никогда не будет вызван! Зарегистрируйте его где-нибудь в другом месте, обычно в методе ready класса app: https://docs.djangoproject.com/en/3.1/ref/applications/#django.apps .AppConfig.ready

Комментарии:

1. Спасибо. Позвольте мне попробовать это.