Django教程:'polls.Choice'对'polls.Choice'没有ForeignKey。

时间:2015-08-21 15:36:26

标签: python django

我在django教程的第二部分进行编码时出现此错误,我不知道为什么,我的网站代码相同。

Django 1.8.3

ERRORS:
<class 'polls.admin.ChoiceInline'>: (admin.E202) 'polls.Choice' has no ForeignKey to 'polls.Choice'.

System check identified 1 issue (0 silenced).

我的models.py

    import datetime

from django.db import models
from django.utils import timezone

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __str__(self):
        return self.question_text

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

class Choice(models.Model):
    question = models.ForeignKey(Question)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text

我的admin.py

from django.contrib import admin

from .models import Choice, Question

class ChoiceInline(admin.StackedInline):
    model = Choice
    extra = 3

class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,{'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]
    inlines = [ChoiceInline]

admin.site.register(Choice, ChoiceInline)
admin.site.register(Question, QuestionAdmin)

我真的会提前帮助,我真的不知道是什么问题,想完成这个教程

1 个答案:

答案 0 :(得分:2)

ChoiceInline已通过设置

已包含在QuestionAdmin

inlines = [ChoiceInline]

这意味着当您编辑问题时,您将能够同时添加,编辑和删除该问题的选择。

由于这一行,您收到错误:

admin.site.register(Choice, ChoiceInline)

这是invalud,因为您无法使用Inline注册模型。您只能注册ModelAdmin类的模型。要停止错误,只需从代码中删除此行。

如果你想自己编辑选择,你需要定义一个ChoiceAdmin类并注册它。

admin.site.register(Choice, ChoiceAdmin)

或者,如果您不需要任何自定义,则实际上并不需要模型管理员。

admin.site.register(Choice)