У меня есть аналогичное расположение в другой модели, где это прекрасно работает, но я не понимаю, что я здесь сделал неправильно.
Вид, на который указывает ошибка:
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()