首页 > 解决方案 > 无法从 views.py 访问我的模型数据库

问题描述

我正在学习 Django 2.2,我正在尝试从名为 sKills 的模型基于名为 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 Value:    
Profile matching query does not exist.

在技​​能 => 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)

在技​​能 => 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)

在技​​能 => urls.py 中:

app_name = 'skills'

urlpatterns = [
    path('', skill_view, name='my-skills'),
    ]

在技​​能 => 模板 => 技能 => add.html 中:

{% extends 'base.html' %}

{% block title %}my skills{% endblock title %}

{% block content %}

<form action="" method="POST">
{{formset}}
</form>
{% endblock content %}

在配置文件 => 模型中:

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)

我在数据库中有个人资料用户我不明白:

在此处输入图像描述

谢谢你的帮助

标签: djangopython-3.xdjango-models

解决方案


当您针对用户 id查找pk时, 这是不正确的,因为您没有将name字段设置为primary_key=True或从User模型本身继承。您必须查找个人资料的名称字段

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)

推荐阅读