我已经开始了一个博客应用程序。该模型如下所示:
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=512)
image = models.ImageField(upload_to='/pathto/blogImages')
body = models.TextField()
visible = models.BooleanField()
date_created = models.DateTimeField(auto_now_add=True)
date_updated = models.DateTimeField(auto_now=True)
def __unicode__(self):
return self.title
class Tag(models.Model):
keyword = models.CharField(max_length=256)
posts = models.ManyToManyField(Post)
def __unicode__(self):
return self.keyword
运行syncdb后,我创建了一个如下所示的admin.py文件:
from blog.models import Post
from blog.models import Tag
from django.contrib import admin
class TagInline(admin.TabularInline):
model = Tag
extra = 3
class PostAdmin(admin.ModelAdmin):
inlines = [TagInline]
admin.site.register(Post, PostAdmin)
当我访问管理区域(http:// localhost:8000 / admin / blog / post / add /)时出现以下错误:
Exception at /admin/blog/post/add/
<class 'blog.models.Tag'> has no ForeignKey to <class 'blog.models.Post'>
Request Method: GET
Request URL: http://localhost:8000/admin/blog/post/add/
Django Version: 1.4.1
Exception Type: Exception
Exception Value:
<class 'blog.models.Tag'> has no ForeignKey to <class 'blog.models.Post'>
Exception Location: /usr/local/lib/python2.7/dist-packages/django/forms/models.py in _get_foreign_key, line 800
Python Executable: /usr/bin/python
Python Version: 2.7.3
当我在django中查找多对五的关系时,我找到了https://docs.djangoproject.com/en/dev/topics/db/examples/many_to_many/。我一直无法找到我所缺少的东西。如何避免错误?
答案 0 :(得分:1)
当您处理多对多关系时,InlineModelAdmin
应该look like this:
class TagInline(admin.TabularInline):
model = Tag.posts.through
答案 1 :(得分:0)
也许您可以尝试将帖子的模型字段设置为
posts = models.ManyToManyField(Post, null=True, blank=True)
。
我猜这篇文章可能没有创建,所以它无法创建标签或用帖子“连接”标签。
答案 2 :(得分:0)
你的多对多字段应该在帖子模型上而不是标签模型。必须按顺序定义对象,否则必须建模.ManyToManyField('tag')除非不可避免,否则不建议这样做。所以首先定义标签然后发布,这样你就可以在post模型下使用just(tag)。我建议只使用django标记。它一直很好用。
毕竟,让django如此吸引人的是可重复使用的应用程序和快速开发。