Невозможно исправить ошибку TypeError: объект 'Post' не вызывается - PullRequest
0 голосов
/ 12 января 2020

У меня есть аналогичное расположение в другой модели, где это прекрасно работает, но я не понимаю, что я здесь сделал неправильно.

Вид, на который указывает ошибка:

class PostContentCreateUpdateView(TemplateResponseMixin, View):
    post = None
    model = None
    obj = None
    template_name = 'blog/manage/content/form.html'

    def get_model(self, model_name):
        if model_name in ['text', 'video', 'image', 'file']:
            return apps.get_model(app_label='blog', model_name=model_name)
        return None

    def get_form(self, model, *args, **kwargs):
        Form = modelform_factory(model, exclude=['author','order','created','updated'])
        return Form(*args, **kwargs)

    def dispatch(self, request, post_id, model_name, id=None):
        self.post = get_object_or_404(Post, id=post_id, author=request.user)
        self.model = self.get_model(model_name)
        if id:
            self.obj = get_object_or_404(self.model,id=id)
        return super(PostContentCreateUpdateView, self).dispatch(request, post_id, model_name, id)

Traceback

Файл "/root/.local/share/virtualenvs/xxxxx-p-e2f9Se/lib/python3.7/site -packages / django / core / handlers / exception.py "во внутренних 34-х. response = get_response (запрос)

Файл" /root/.local/share/virtualenvs/xxxxx-p-e2f9Se/lib/python3 .7 / site-packages / django / core / handlers / base.py "в _get_response 126. response = self.process_exception_by_middleware (e, запрос)

Файл" /root/.local/share/virtualenvs /xxxxx-p-e2f9Se/lib/python3.7/site-packages/django/core/handlers/base.py "в _get_response 124. response = wrapped_callback (запрос, * callback_args, ** callback_kwargs)

Файл "/root/.local/share/virtualenvs/xxxx-p-e2f9Se/lib/python3.7/site-packages/django/views/generic/base.py" в представлении 68. return self.dispatch (запрос * аргументы ** kwargs)

Файл "/home/xxxxx/xxxxx/xxxxx/blog/views.py" в отправке 132. return super (PostContentCreateUpdateView, self) .dispatch (запрос, post_id, имя модели, id)

Файл "/root/.local/share/virtualenvs/xxxxx-p-e2f9Se/lib/python3.7/site-packages/django/views/generic/base.py" в диспетчере 88. обработчик возврата ( request, * args, ** kwargs)

Тип исключения: TypeError в / blog / post / 5 / content / image / create / Exception Значение: объект 'Post' не может быть вызван

Почтовая модель для справки:

class Post(models.Model):
    STATUS_CHOICES = (
        ('draft', 'Draft'),
        ('published', 'Published'),
        )
    category = models.ForeignKey(Category, related_name='Posts', on_delete=models.CASCADE)
    title = models.CharField(max_length=250)
    slug = models.SlugField(max_length=250, unique_for_date='publish')
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_posts')
    publish = models.DateTimeField(default=timezone.now)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')

    objects = PublishedManager()

    class Meta:
        ordering = ('-publish',)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('blog:post_detail',
            args=[self.publish.year,
            self.publish.month,
            self.publish.day,
            self.slug])

class PostContent(models.Model):
    post = models.ForeignKey(Post, related_name='post_contents', on_delete=models.CASCADE)
    post_content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE, 
        limit_choices_to={'model__in':('text','video','image','file')})
    object_id = models.PositiveIntegerField()
    item = GenericForeignKey('post_content_type', 'object_id')
    order = OrderField(blank=True, for_fields=['post'])

    class Meta:
        ordering = ['order']

class ItemBase(models.Model):

    class Meta:
        abstract = True

class Text(ItemBase):
    content = RichTextUploadingField()

class File(ItemBase):
    file = models.FileField(upload_to='files')

class Image(ItemBase):
    file = models.FileField(upload_to='images')

class Video(ItemBase):
    url = models.URLField()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...