django "тип объекта" UserProfile "не имеет атрибута" DoesNotExist "" - PullRequest
0 голосов
/ 27 июня 2019

Я использую Django Restapi Framework и пытаюсь сделать CruD, я завершил операции вставки, обновления, выбора, но не могу удалить запись. Я немного застрял с этим понитом, если кто-нибудь может сказать, в каком направлении я должен пойти, чтобы исправить это, я буду очень рад, что вы.

urls.py Я пробую как URL, так и путь к файлу

   path('user/profile/add', views.AddProfile.as_view(), name='user_profile_add'),   
     # path('user/profile/delete/<int:id>', views.DeleteProfile.as_view(), name='user_profile_delete'), 
    url(r'^user/profile/(?P<pk>\d+)/delete/$', views.DeleteProfile.as_view(), name='user_profile_add'),

views.py

class DeleteProfile(APIView):
    permission_classes = (IsAuthenticated,)

     def get_object(self, pk):
        try:
            return UserProfile.objects.get(pk=pk)
        except UserProfile.DoesNotExist:
            raise Http404

    def delete(self, request, pk):
        userprofile = self.get_object_or_404(id=pk)
        userprofile.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

serializers.py

class UserProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserProfile
        fields = ('id', 'userid', 'accounttype')

models.py

from django.shortcuts import render, redirect, get_object_or_404, render_to_response 
from .models import UserProfile 
from rest_framework.permissions import IsAuthenticated 
from rest_framework.response import Response 
from rest_framework.views import APIView 
from rest_framework import serializers 
from rest_framework import status

class UserProfile(models.Model):
    id = models.AutoField(primary_key=True, verbose_name='PID')
    userid = models.BigIntegerField(verbose_name='UID')
    accounttype = models.CharField(max_length=20, verbose_name='AccType')
    list_display = ('id', 'accounttype', 'userid')

Я изменил views.py на

class DeleteProfile(APIView):
    permission_classes = (IsAuthenticated,)

    def get_object(self, pk):
        try:
            return UserProfile.objects.get(pk=pk)
        except ObjectDoesNotExist:
            raise Http404

    def delete(self, request, pk, format=None):
        userprofile = self.get_object(pk)
        userprofile.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

и получение этой ошибки от терминала:

    response = handler(request, *args, **kwargs)
  File "D:\Only One Will Live - 3\dysapp\views.py", line 329, in delete
    userprofile = self.get_object(pk)

  File "D:\Only One Will Live - 3\dysapp\views.py", line 324, in get_object
    return UserPorfile.objects.get(pk=pk)
NameError: name 'UserPorfile' is not defined
[27/Jun/2019 11:28:06] "DELETE /user/profile/37/delete/ HTTP/1.1" 500 18477

Текущая ошибка:

    response = handler(request, *args, **kwargs)
  File "D:\Only One Will Live - 3\dysapp\views.py", line 329, in delete
    userprofile = self.get_object(pk)

  File "D:\Only One Will Live - 3\dysapp\views.py", line 324, in get_object
    return UserProfile.objects.get(pk=pk)
AttributeError: type object 'UserProfile' has no attribute 'objects'
[27/Jun/2019 11:42:16] "DELETE /user/profile/37/delete/ HTTP/1.1" 500 18525

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

"Я думаю, что вы определили класс в файле представлений, который также называется UserProfile, который перезаписывает модель, которую вы импортировали. Назовите этот взгляд чем-то другим. "Даниэль Роузман

решена.

0 голосов
/ 27 июня 2019
from django.core.exceptions import ObjectDoesNotExist
from django.shortcuts import get_object_or_404
......

try:
  # try something
except ObjectDoesNotExist:
  # do something

#### Or use the following
get_object_or_404(UserProfile, pk=pk)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...