【发布时间】:2020-03-25 11:52:57
【问题描述】:
我正在使用图表 js 学习 Django 2.2,我试图在更改 URL 中的 id 时显示我的用户技能。我有 2 个用户,它适用于第一个但不适用于第二个。
这是错误:
Profile matching query does not exist.
Request Method: GET
Request URL: http://127.0.0.1:8080/skills/2/
Django Version: 2.2
Exception Type: DoesNotExist
Exception Value:
Profile matching query does not exist.
这是我的个人资料模型,Profile => models.py:
from django.db import models
from django.contrib.auth.models import User
from django.core.validators import FileExtensionValidator
# Create your models here.
class Profile(models.Model):
name = models.ForeignKey(User, on_delete=models.CASCADE)
website = models.URLField(blank=True)
avatar = models.ImageField(upload_to='uploads/img', validators=[FileExtensionValidator(allowed_extensions=['png'])], blank=True)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
@property
def get_created(self):
return self.created.strftime("%m/%d/%Y, %H:%M:%S")
def __str__(self):
return "{}-{}".format(self.name, self.get_created)
这是我的技能模型,技能 => models.py
from django.db import models
from profiles.models import Profile
from django.core.validators import MaxValueValidator, MinValueValidator
# Create your models here.
class Skill(models.Model):
user = models.ForeignKey(Profile, on_delete=models.CASCADE)
name = models.CharField(max_length=220)
score = models.PositiveIntegerField(
validators=[MinValueValidator(1), MaxValueValidator(5)])
def __str__(self):
return "{}-{}-{}".format(self.user, self.name, self.score)
这是我的技能网址,技能 => urls.py:
from django.urls import path
from .views import skill_view, UserChartView
app_name = 'skills'
urlpatterns = [
path('', skill_view, name='my-skills'),
path('<profile_id>/', UserChartView.as_view(), name='user-skills'),
]
这是我的用户视图,Skills => views.py:
from django.shortcuts import render, redirect
from django.forms import inlineformset_factory
from .models import Skill
from profiles.models import Profile
from django.views.generic import TemplateView
# Create your views here.
class UserChartView(TemplateView):
template_name = 'skills/user_skills.html'
def get_object(self):
pk = self.kwargs.get('profile_id')
return pk
def get_context_data(self, **kwargs):
context = super(UserChartView, self).get_context_data(**kwargs)
profile = Profile.objects.get(name__id=self.get_object())
qs = profile.skill_set.all()
context["qs"] = qs
return context
【问题讨论】:
-
您应该真正研究自定义用户模型,而不是单独的配置文件模型。
-
顺便说一句,您的配置文件模型允许每个用户拥有多个配置文件(ForeignKey 而不是 OneToOneField)。这是故意的吗?
标签: django python-3.x django-models django-views