Python get_object_或_404返回get()缺少2个必需的位置参数:';自我';和';请求';

Python get_object_或_404返回get()缺少2个必需的位置参数:';自我';和';请求';,python,django,django-views,django-2.1,Python,Django,Django Views,Django 2.1,当我调用get_object_或_404()为我的DetailView获取对象时,我会收到以下错误消息: get()缺少2个必需的位置参数:“self”和“request” 我想我在概念上遗漏了一些东西,这些东西阻止我正确地解决这个问题。如果能帮我指出正确的方向,我将不胜感激 回溯: Environment: Request Method: GET Request URL: http://127.0.0.1:8000/wines/profiles/justin/cabernet-sauvig

当我调用get_object_或_404()为我的DetailView获取对象时,我会收到以下错误消息:

get()缺少2个必需的位置参数:“self”和“request”

我想我在概念上遗漏了一些东西,这些东西阻止我正确地解决这个问题。如果能帮我指出正确的方向,我将不胜感激

回溯:

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/wines/profiles/justin/cabernet-sauvignon/

Django Version: 2.1.4
Python Version: 3.7.1
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'debug_toolbar',
 'bootstrap4',
 'accounts',
 'groups',
 'wines',
 'posts']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'debug_toolbar.middleware.DebugToolbarMiddleware']



Traceback:

File "/anaconda3/envs/wineEnv/lib/python3.7/site-packages/django/core/handlers/exception.py" in inner
  34.             response = get_response(request)

File "/anaconda3/envs/wineEnv/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
  126.                 response = self.process_exception_by_middleware(e, request)

File "/anaconda3/envs/wineEnv/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
  124.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/anaconda3/envs/wineEnv/lib/python3.7/site-packages/django/views/generic/base.py" in view
  68.             return self.dispatch(request, *args, **kwargs)

File "/anaconda3/envs/wineEnv/lib/python3.7/site-packages/django/views/generic/base.py" in dispatch
  88.         return handler(request, *args, **kwargs)

File "/anaconda3/envs/wineEnv/lib/python3.7/site-packages/django/views/generic/detail.py" in get
  106.         self.object = self.get_object()

File "/Users/ed/code/wine/wineProject/wineProject/wines/views.py" in get_object
  40.         wp = get_object_or_404(WineProfile, slug=self.kwargs['w_slug'], winemaker=self.winemaker.winemaker_id)

File "/anaconda3/envs/wineEnv/lib/python3.7/site-packages/django/shortcuts.py" in get_object_or_404
  93.         return queryset.get(*args, **kwargs)

Exception Type: TypeError at /wines/profiles/justin/cabernet-sauvignon/
Exception Value: get() missing 2 required positional arguments: 'self' and 'request'
models.py

class WineMaker(models.Model):
    winemaker_id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255, unique=True)
    slug = AutoSlugField(null=False, unique=True, populate_from='name', default='winemaker')
    region = models.ForeignKey(
        WineRegion,
        db_column = 'region_id',
        related_name = 'winemakers',
        on_delete = models.CASCADE,
        null = True
    )

    def __str__(self):
        return self.name

    class Meta:
        db_table = 'winemakers'

class WineProfile(models.Model):
    id = models.AutoField(primary_key=True)
    winemaker = models.ForeignKey(
        WineMaker,
        db_column = 'winemaker_id',
        related_name = 'profiles',
        on_delete = models.CASCADE
    )
    name = models.CharField(max_length=510)
    slug = AutoSlugField(null=False, populate_from='name')
    description = models.TextField(max_length=10000, null=True)
    image = models.ImageField(upload_to='static/wineProject/images/wineProfiles', null=True)

    class Meta:
        db_table = 'wine_profiles'
        unique_together = ('winemaker','slug')

    def __str__(self):
        return (winemaker.name + ',' + name)
views.py

class WineProfile(DetailView):
    model = WineProfile
    template_name = 'wines/wine_profile.html'

    def get_object(self):
        self.winemaker = get_object_or_404(WineMaker, slug=self.kwargs['wm_slug'])
        return get_object_or_404(WineProfile, slug=self.kwargs['w_slug'], winemaker=self.winemaker.winemaker_id)
wine_profile.html

{% extends 'wines/wine_base.html' %}

{% block wine_content %}
  <p>Wine Profile Page</p>
  <p>
    Wine Name: {{object.name}} <br>
    Wine Description: {{item.description}} <br>
    Image: <br>

    <h4>Vintages</h4>
      {% for wine in wines.profile.id.all %}
        {{wine.vintage}} {{wine.name}}
      {% endfor %}
  </p>


{% endblock %}
{%extends'wines/wine\u base.html%}
{%block wine_content%}
葡萄酒简介页面

葡萄酒名称:{{object.Name}}
葡萄酒描述:{{item.Description}}
图像:
年份 {wines.profile.id.all%中葡萄酒的百分比} {{wine.vinge}{{wine.name} {%endfor%}

{%endblock%}
url.py

from django.urls import path, re_path
from wines import views

app_name = 'wines'

urlpatterns = [
    path('winemakers/', views.WinemakerList.as_view(), name='winemaker_list'),
    path('profiles/<wm_slug>/', views.WineList.as_view(), name='wine_list'),
    path('profiles/<wm_slug>/<slug:w_slug>/', views.WineProfile.as_view(), name='wine_profile'),
]
从django.url导入路径,重新设置路径
从葡萄酒进口观点
应用程序名称=‘葡萄酒’
URL模式=[
路径('winemakers/',views.WinemakerList.as_view(),name='winemaker_list'),
路径('profiles/',views.WineList.as_view(),name='wine_list'),
路径('profiles//',views.WineProfile.as_view(),name='wine_profile'),
]

您有两件事叫做
WineProfile
——您的模型和视图。重命名其中一个-可能您应该将视图重命名为
WineProfileDetail

您有两件事叫做
WineProfile
-您的模型和视图。重命名其中一个-可能应该将视图重命名为
WineProfileDetail