#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. Спасибо. Позвольте мне попробовать это.