0

ブログアプリ始めました。モデルは次のようになります。

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で多対5の関係を調べたところ、https://docs.djangoproject.com/en/dev/topics/db/examples/many_to_many/が見つかりました。足りないものを見つけることができませんでした。エラーを回避するにはどうすればよいですか?

4

3 に答える 3

1

多対多の関係を扱っているので、次のようInlineModelAdminになります。

class TagInline(admin.TabularInline):
    model = Tag.posts.through
于 2012-10-08T06:05:28.927 に答える
0

たぶん、投稿のモデルフィールドを

posts = models.ManyToManyField(Post, null=True, blank=True).

投稿が作成されていない可能性があるため、タグを作成したり、タグを投稿に「接続」したりできません。

于 2012-10-08T02:04:13.940 に答える
0

多対多フィールドは、タグモデルではなくポストモデルにある必要があります。オブジェクトを順番に定義するか、models.ManyToManyField('tag') を定義する必要があります。やむを得ない場合を除き、これはお勧めできません。最初にタグを定義してから投稿するので、投稿モデルの下の(タグ)だけで実行できます。django のタグ付けのみを使用することをお勧めします。それはいつも私によく役立ってきました。

結局のところ、django を魅力的なものにしているのは、再利用可能なアプリと迅速な開発です。

于 2012-10-08T09:01:47.767 に答える