Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在django中调用Python对象时超出了最大递归深度_Python_Django_Django Views - Fatal编程技术网

在django中调用Python对象时超出了最大递归深度

在django中调用Python对象时超出了最大递归深度,python,django,django-views,Python,Django,Django Views,我想在我的web应用程序中创建注释。每个评论只能连接到一篇文章。我可以通过“管理”字段添加评论,但当我在网页上尝试时,会出现错误。你能帮帮我吗。 多谢各位 models.py from django.db import models from django.contrib.auth.models import User from django.utils.text import slugify # Create your models here. class PostModel(models.

我想在我的web应用程序中创建注释。每个评论只能连接到一篇文章。我可以通过“管理”字段添加评论,但当我在网页上尝试时,会出现错误。你能帮帮我吗。 多谢各位

models.py

from django.db import models
from django.contrib.auth.models import User
from django.utils.text import slugify
# Create your models here.

class PostModel(models.Model):
    post = models.TextField(max_length=256, unique=True)
    slug = models.SlugField(max_length=20, unique=True)
    author = models.ForeignKey(User, on_delete= models.CASCADE,related_name='post_author')
    created_on = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['-created_on']

    def save(self, *args, **kwargs):
        self.slug = self.slug or slugify(self.post)
        super().save(*args, **kwargs)


    def __repr__(self):
        return f"{self.post}"


class CommentModel(models.Model):
    post = models.ForeignKey('dictionary.PostModel', on_delete=models.CASCADE, related_name='post_comment')
    comment=models.TextField(max_length=256,unique=True)
    author = models.ForeignKey(User, on_delete= models.CASCADE,related_name='comment_author')
    created_on = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['-created_on']


    def get_absolute_url(self):
        return reverse("comment_detail",kwargs={'pk':self.pk})


    def __str__(self):
        return self.comment
views.py

from django.shortcuts import render,redirect
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views import generic
from django.views.generic.edit import FormMixin
from .models import PostModel,CommentModel
from .forms import PostForm,CommentForm
from django.urls import reverse
from django.views.generic.edit import ModelFormMixin




# Create your views here.
class PostList(LoginRequiredMixin,generic.CreateView):
    template_name = 'home.html'
    form=PostForm
    model = PostModel
    fields=['post']
    success_url="/home"

    def form_valid(self, form):
        form.instance.author=self.request.user
        return super().form_valid(form)

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context ['postmodel_list'] = PostModel.objects.order_by('-created_on')
        return context




class PostDetail(LoginRequiredMixin,ModelFormMixin,generic.DetailView):
    model = PostModel
    template_name = 'post_detail.html'
    form_class=CommentForm


    def get_success_url(self):
        return reverse('post_detail',kwargs={'slug':self.object.slug})

    def get_context_data(self, **kwargs):
        context = super(PostDetail,self).get_context_data(**kwargs)
        context ['commentmodel_list'] = CommentModel.objects.filter(post=self.object).order_by('-created_on')
        return context

    def post(self, request, *args, **kwargs):
        self.object = self.get_object()
        form = self.get_form()
        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form)


    def form_valid(self, form):
        form.instance.author = self.request.user
        form.instance.post = self.object
        return super(PostDetail,self).form_valid(form)
回溯

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/home/bu-da-benim-ilk-postum/

Django Version: 3.0.8
Python Version: 3.8.1
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'crispy_forms',
 'account',
 'dictionary']
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 (most recent call last):
  File "C:\Users\ekrem\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\ekrem\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\ekrem\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\ekrem\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\views\generic\base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Users\ekrem\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\auth\mixins.py", line 52, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "C:\Users\ekrem\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\views\generic\base.py", line 97, in dispatch
    return handler(request, *args, **kwargs)
  File "C:\Users\ekrem\Documents\Django\project\beehive\dictionary\views.py", line 51, in post
    return self.form_valid(form)
  File "C:\Users\ekrem\Documents\Django\project\beehive\dictionary\views.py", line 59, in form_valid
    return super(PostDetail,self).form_valid(form)
  File "C:\Users\ekrem\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\views\generic\edit.py", line 125, in form_valid
    self.object = form.save()
  File "C:\Users\ekrem\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\forms\models.py", line 459, in save
    self.instance.save()
  File "C:\Users\ekrem\Documents\Django\project\beehive\dictionary\models.py", line 17, in save
    super().save(*args, **kwargs)
  File "C:\Users\ekrem\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\models\base.py", line 745, in save
    self.save_base(using=using, force_insert=force_insert,
  File "C:\Users\ekrem\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\models\base.py", line 782, in save_base
    updated = self._save_table(
  File "C:\Users\ekrem\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\models\base.py", line 864, in _save_table
    updated = self._do_update(base_qs, using, pk_val, values, update_fields,
  File "C:\Users\ekrem\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\models\base.py", line 917, in _do_update
    return filtered._update(values) > 0
  File "C:\Users\ekrem\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\models\query.py", line 771, in _update
    return query.get_compiler(self.db).execute_sql(CURSOR)
  File "C:\Users\ekrem\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\models\sql\compiler.py", line 1500, in execute_sql
    cursor = super().execute_sql(result_type)
  File "C:\Users\ekrem\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\models\sql\compiler.py", line 1139, in execute_sql
    sql, params = self.as_sql()
  File "C:\Users\ekrem\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\models\sql\compiler.py", line 1460, in as_sql
    raise TypeError(

Exception Type: TypeError at /home/bu-da-benim-ilk-postum/
Exception Value: Tried to update field dictionary.PostModel.post with a model instance, PostModel object (4). Use a value compatible with TextField.

我还有一个str方法,其中我返回了self.comment或str(self.comment),或者有一个repr函数,但每次都会出现奇怪的错误。

方法的实现不正确。我认为你应该使用
\uuuu repr\uuu
方法。但是如果您确定要使用
\uuu str\uuu
方法,请不要在内部使用
str
函数

我建议这样做:

def\uuu repr\uu(自):
返回f“{self.post}”

请编辑您的问题,并添加
评论表单
后期模型
代码。很抱歉打扰您。但是,您也可以添加错误stacktrace吗?没问题,现在您看到了这个错误:尝试使用模型实例更新field dictionary.PostModel.post。使用与TextField兼容的值。已更新答案。请再试一次,真奇怪!你能把新的stacktrace发给我吗?可以肯定的是,您的代码现在是否只有
\uuuu repr\uuuu
方法而没有
\uuu str\uuu
方法?您是否将CommentModel的方法更改为使用
self.comment
?我在问题中使用了我的新代码,我只使用了repr,而我不理解第二个问题哦!您有两个
\uuuu str\uuu
方法。一个在
PostModel
中,另一个在
CommentModel
中。它们应该分别返回
f{self.post}
f{self.comment}
。并且
postdail
form\u valid
方法的第二行导致了新的错误。
self.instance.post
应该分配一个文本,而不是一个对象。