2017-02-23 39 views
0

Когда я добавляю сообщение от администратора, он присваивает идентификатор, и я могу ссылаться на сообщение. Я не получаю ошибок, когда иду на этот адрес. Но если я создаю почтовую форму, мне кажется, что я не получаю идентификатор. Я получаю ошибку, которая говорит, что нет соответствующего запроса. Я думал, что идентификатор автоматически назначается.При выполнении запроса POST на модели из формы он не присваивает идентификатор объекту

Environment: 


Request Method: GET 
Request URL: http://127.0.0.1:8000/reports/5/this-is-even-more-formal/ 

Django Version: 1.10.5 
Python Version: 3.6.0 
Installed Applications: 
['django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'django.contrib.humanize', 
'TheFishNetwork', 
'accounts', 
'subnetwork', 
'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'] 



Traceback: 

File "/home/swapnil/python_envs/fishenv/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner 
    39.    response = get_response(request) 

File "/home/swapnil/python_envs/fishenv/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response 
    187.     response = self.process_exception_by_middleware(e, request) 

File "/home/swapnil/python_envs/fishenv/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response 
    185.     response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "/home/swapnil/PycharmProjects/fishnetwork/posts/views.py" in report_detail 
    38.  user = User.objects.get(id=pk) 

File "/home/swapnil/python_envs/fishenv/lib/python3.6/site-packages/django/db/models/manager.py" in manager_method 
    85.     return getattr(self.get_queryset(), name)(*args, **kwargs) 

File "/home/swapnil/python_envs/fishenv/lib/python3.6/site-packages/django/db/models/query.py" in get 
    385.     self.model._meta.object_name 

Exception Type: DoesNotExist at /reports/5/this-is-even-more-formal/ 
Exception Value: User matching query does not exist. 

views.py

@login_required 
def create_report(request): 
    if request.method == "POST": 
     if request.POST['title'] and request.POST['body']: 
      report = FishingReport() 
      report.title = request.POST['title'] 
      report.slug = slugify(report.title) 
      report.body = request.POST['body'] 
      report.sub_network = SubNetwork.objects.get(sub_name=request.POST['sub']) 
      report.pub_date = timezone.datetime.now() 
      report.author = request.user 
      report.save() 
      return render(request, 'posts/createreport.html') 
    else: 
     subnetwork = SubNetwork.objects.all() 
     return render(request, 'posts/createreport.html', 
         {'subnetwork': subnetwork}) 


def report_detail(request, pk): 
    report = FishingReport.objects.get(id=pk) 
    comments = Comment.objects.filter(parent_report=pk) 
    user = User.objects.get(id=pk) 
    return render(request, 'posts/report_detail.html', 
        {'report': report, 
        'comments': comments, 
        'user': user}) 

urls.py

urlpatterns = [ 
    url(r'^create/', views.create_report, name='create_report'), 
    url(r'^(?P<pk>[0-9]+)/([-\w]+)/$', views.report_detail, name='report_detail'), 
] 

models.py

class FishingReport(models.Model): 
    title = models.CharField(max_length=200) 
    slug = models.SlugField(max_length=200, unique=True) 
    body = models.TextField() 
    pub_date = models.DateTimeField() 
    author = models.ForeignKey(User) 
    votes_total = models.IntegerField(default=1) 
    sub_network = models.ForeignKey(SubNetwork) 

    def get_absolute_url(self): 
     return reverse('posts:report_detail', 
         args=[self.id, 
          self.slug]) 

    def __str__(self): 
     return self.title 
+0

Трассировка стека указывает на ее проблему с представлением 'report_detail', поэтому вам также нужно показать нам это. – Rohan

+0

Прежде чем сохранять его, необходимо сначала подтвердить его. – flowfree

+0

добавлено report_detail view –

ответ

1

Вы используете тот же первичный ключ для доступа к Report и User:

report = FishingReport.objects.get(id=pk) 
comments = Comment.objects.filter(parent_report=pk) 
user = User.objects.get(id=pk) 

В URL, pk=5, кажется, идентификатор отчета вы создали, а не на пользователя, который вы пытаетесь получить доступ. И, глядя на stacktrace, кажется, что в базе данных нет пользователя с id 5.

+0

Да. Я был до поздней ночи. Это была абсолютно проблема. Огромное спасибо. –