0
私はDjangoを初めて勉強しました。それはブログプロジェクトです。ブログを拡張しようとしたときにコメントを追加するアプリがあります。 imprtエラーを受け取っています。Django ImportError:名前をインポートできませんComment
forms.py以下のモデル、ビュー、フォーム、およびトレースバック
from django import forms
from django.db import models
from blog.models import Comment
class EmailPostForm(forms.Form):
name = forms.CharField(max_length=25)
email = forms.EmailField()
to = forms.EmailField()
comments = forms.CharField(required=False, widget=forms.Textarea)
class CommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = ('name', 'email', 'body')
models.py
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from .forms import EmailPostForm, CommentForm
# Create your models here.
class PublishedManager(models.Manager):
def get_queryset(self):
return super(PublishedManager, self).get_queryset().filter(status='published')
class Post(models.Model):
STATUS_CHOICES = (
('draft', 'Draft'),
('published', 'Published'),
)
title = models.CharField(max_length=250)
slug = models.SlugField(max_length=250, unique_for_date="publish")
author = models.ForeignKey(User, related_name='blog_posts')
body = models.TextField()
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 = models.Manager()
published = 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.strftime('%m'),
self.publish.strftime('%d'),
self.slug])
class Comment(models.Model):
post = models.ForeignKey(Post, related_name='comments')
name = models.CharField(max_length=80)
email = models.EmailField()
body = models.TextField()
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
active = models.BooleanField(default=True)
class Meta:
ordering = ('created',)
def __str__(self):
return "Comment by {} on {}".format(self.name, self.post)
ビューが含まれているプロジェクトで作成したモデルをインポートすることができません.py
from django.shortcuts import render , get_object_or_404
from blog.models import Post, Comment
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.views.generic import ListView
from django.core.mail import send_mail
from blog.forms import CommentForm, EmailPostForm
class PostListView(ListView):
queryset = Post.published.all()
context_object_name = 'posts'
paginate_by = 3
template_name = 'list.html'
# Create your views here.
def post_list(request):
posts = Post.objects.all()
object_list = Post.published.all()
paginator = Paginator(object_list,3)
page = request.GET.get('page')
try:
posts = paginator.page('page')
except PageNotAnInteger:
posts = paginator.page(1)
except EmptyPage:
posts = paginator.page(paginator.num_pages)
return render(request, 'list.html', {'posts': posts,
'page':page})
def post_detail(request, year, month, day, post):
post = get_object_or_404(Post, slug=post,
status='published',
publish__year=year,
publish__month=month,
publish__day=day)
#list of active comments for this post
comments = post.comments.filter(active=True)
if request.method == 'POST':
# A comment was posted
comment_form = CommentForm(data=request.POST)
if comment_form.is_valid():
#create comment object but don't save to DB
new_comment = comment_form.save(commit=False)
# assitgn comment to post
new_comment.post = post
# save the comment to the DB
new_comment.save()
else:
comment_form =CommentForm()
args = {}
args.update(csrf(request))
args['post'] = post
args['comment_form']= comment_form
args['comments'] = comments
return render(request, 'detail.html', args)
def post_share(request,post_id):
# retrieve post by id
post = get_object_or_404(Post, id=post_id, status='published')
sent = False
if request.method == 'POST':
# form was submitted
form = EmailPostForm(request.POST)
if form.is_valid():
# Forms fields passed validation#
cd = form.cleaned_data
post_url = request.build_absolute_uri(post.get_absolute_url())
subject = '{} recommends you read "{}"'.format(cd['name'],post.title)
message = 'Read "{}" at {}\n\n{}\'s comments: {}'.format(post.title,post_url,cd['name'],cd['comments'])
send_mail(subject,message,'[email protected]',[cd['to']])
sent=True
else:
form = EmailPostForm()
return render(request, 'share.html',{'post':post,
'form': form,
'sent': sent})
return "Comment by {} on {}".format(self.name, self.post)
トレースバック
(MySiteVirtualEnv) [email protected]:~/MySite/MySiteVirtualEnv/mysite# python manage.py makemigrations
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/root/MySite/MySiteVirtualEnv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
utility.execute()
File "/root/MySite/MySiteVirtualEnv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 327, in execute
django.setup()
File "/root/MySite/MySiteVirtualEnv/local/lib/python2.7/site-packages/django/__init__.py", line 18, in setup
apps.populate(settings.INSTALLED_APPS)
File "/root/MySite/MySiteVirtualEnv/local/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate
app_config.import_models(all_models)
File "/root/MySite/MySiteVirtualEnv/local/lib/python2.7/site-packages/django/apps/config.py", line 202, in import_models
self.models_module = import_module(models_module_name)
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/root/MySite/MySiteVirtualEnv/mysite/blog/models.py", line 5, in <module>
from .forms import EmailPostForm, CommentForm
File "/root/MySite/MySiteVirtualEnv/mysite/blog/forms.py", line 3, in <module>
from blog.models import Comment
ImportError: cannot import name Comment
はどうもありがとうございました「Pythonの円形輸入を?」しかし、まだ理論を把握することができなかったか、正確に何を変更するか:-) .... –