【问题标题】:django: 'has no ForeignKey' Error while running the 'django by example' tutorial codedjango:运行“django by example”教程代码时出现“没有 ForeignKey”错误
【发布时间】:2012-07-19 15:47:56
【问题描述】:

我正在关注“django by example”教程的this 部分。现在,当我转到 /admin/todo/datetime/ 并单击 Add date time 时,我收到此错误:

Exception Type: Exception at /admin/todo/datetime/add/
Exception Value: <class 'todo.models.Item'> has no ForeignKey to <class 'todo.models.DateTime'>

我的代码几乎相同(除了我包含了导入语句):

from django.db import models
from django.contrib import admin

class DateTime(models.Model):
    datetime = models.DateTimeField(auto_now_add = True)
    def __unicode__(self):
       return unicode(self.datetime)

class Item(models.Model):
    name = models.CharField(max_length = 60)
    created = models.DateTimeField(auto_now_add = True)
    priority = models.IntegerField(default = 0)
    difficulty = models.IntegerField(default = 0)
    done = models.BooleanField(default = False)

class ItemAdmin(admin.ModelAdmin):
    list_display = ["name", "priority", "difficulty", "created", "done"]
    search_fields = ["name"]

class ItemInline(admin.TabularInline):
    model = Item

class DateAdmin(admin.ModelAdmin):
    list_display = ["datetime"]
    inlines = [ItemInline]

admin.site.register(Item, ItemAdmin)
admin.site.register(DateTime, DateAdmin)

我看过类似的 S.O.线程,但我无法从那里弄清楚这里出了什么问题。 (顺便说一句,我使用 django 1.3django 1.2 用于 turorial)

【问题讨论】:

    标签: python django exception foreign-keys foreign-key-relationship


    【解决方案1】:

    您的模型与教程中的模型不符。您的 Item.createdDateTimeField 而他们的 Item.createdForeignKeyDateTime 模型。

    # From http://lightbird.net/dbe/todo_list.html#adding-multiple-items
    
    class DateTime(models.Model):
        datetime = models.DateTimeField(auto_now_add=True)
        def __unicode__(self):
            return unicode(self.datetime)
    
    class Item(models.Model):
        name = models.CharField(max_length=60)
        created = models.ForeignKey(DateTime)
        priority = models.IntegerField(default=0)
        difficulty = models.IntegerField(default=0)
        done = models.BooleanField(default=False)
    

    【讨论】:

      【解决方案2】:

      您应该在 Item 模型中将 created = models.DateTimeField(auto_now_add = True) 替换为 created = models.ForeignKey(DateTime)

      【讨论】:

        猜你喜欢
        • 2014-11-25
        • 1970-01-01
        • 1970-01-01
        • 2011-09-22
        • 2021-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多