Django 不能accè;s从views.py访问我的模型数据库
我正在学习Django 2.2,我正在尝试根据名为Profile的父模型从命名技能库创建模型: 但我有一个错误:Django 不能accè;s从views.py访问我的模型数据库,django,python-3.x,django-models,Django,Python 3.x,Django Models,我正在学习Django 2.2,我正在尝试根据名为Profile的父模型从命名技能库创建模型: 但我有一个错误: DoesNotExist at /skills/ Profile matching query does not exist. Request Method: GET Request URL: http://127.0.0.1:8080/skills/ Django Version: 2.2 Exception Type: DoesNotExist Exception Valu
DoesNotExist at /skills/
Profile matching query does not exist.
Request Method: GET
Request URL: http://127.0.0.1:8080/skills/
Django Version: 2.2
Exception Type: DoesNotExist
Exception Value:
Profile matching query does not exist.
在Skills=>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)
在Skills=>Views.py中:
# Create your views here.
def skill_view(request):
user_id = request.user.id
profile = Profile.objects.get(pk=user_id)
#profile = get_object_or_404(Profile, pk=user_id)
SkillFormset = inlineformset_factory(Profile, Skill,fields='__all__',extra=1)
formset = SkillFormset( instance=profile)
context = {
'formset': formset
}
return render(request,'skills/add.html',context)
在Skills=>url.py中:
app_name = 'skills'
urlpatterns = [
path('', skill_view, name='my-skills'),
]
在Skills=>templates=>Skills=>add.html中:
{% extends 'base.html' %}
{% block title %}my skills{% endblock title %}
{% block content %}
<form action="" method="POST">
{{formset}}
</form>
{% endblock content %}
我不了解数据库中的用户配置文件:
感谢您的帮助,因为您正在根据用户id查找主键,该id不正确,因为您没有将名称字段设置为主键=True或继承自用户模型本身。您必须查找配置文件的名称字段
profile = Profile.objects.get(name_id=user_id)
您可以将名称设置为主键,如下所示:
name = models.ForeignKey(User, on_delete=models.CASCADE, primary_key=True)
然后你可以查看pk:
profile = Profile.objects.get(pk=user_id)
你能分享这个档案模型吗?最有可能的是用户ID的档案实际上并不存在。不太可能使用annonimous user点击视图。@danish_wani我已更新代码您正在使用外键将配置文件链接到用户。这意味着用户可以有多个配置文件,这将导致
profile.objects.get(…)
失败。你可以用一个新的。如果您这样做,并且总是在创建用户时创建配置文件,那么您可以执行request.user.profile
来获取登录用户的配置文件。感谢如何将名称字段设置为primary\u key=Truename=models.ForeignKey(user,on\u delete=models.CASCADE,primary\u key=True)以了解更多详细信息,请访问
profile = Profile.objects.get(pk=user_id)