由于没有表实例,Django不允许向DB添加记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了由于没有表实例,Django不允许向DB添加记录相关的知识,希望对你有一定的参考价值。

我有一个DB模型:

class building_list(models.Model):
    building_id = models.CharField(max_length=25, verbose_name="Building ID", unique=True)

    def __unicode__(self):
        return self.building_id

class data(models.Model):   
    oDate = models.DateField()
    building_id = models.ForeignKey( building_list, to_field = "building_id" )
    content = models.CharField(max_length=25, verbose_name="Content")

    def __unicode__(self):
        return self.content

通过管理员门户添加记录没有问题,我可以从SELECT列表中选择building_id,一切正常。

但是,当我尝试通过视图添加记录时出现问题。让我告诉你我的代码:

url(r'^(?P<building_id>[w-]+)/$', views.test, name='test'),

def test( request, building_id ):
    if request.method == 'POST':
        oDate = request.POST.get('oDate', '')
        content = request.POST.get('content', '')

        row = data( 
            oDate = oDate,
            building_id = building_id,
            content = content 
        )

        return True

我看到

Cannot assign "u'BrI9'": "data.building_id " must be a "building_list" instance.

谁能解释我做错了什么?

答案

您已将外键命名为building_id,因此id为building_id_id。如果要分配id而不是实例,则必须执行以下操作:

row = data( 
    oDate=oDate,
    building_id_id=building_id,
    content=content,
)

Django中推荐的方法是命名你的外键building

class data(models.Model):   
    oDate = models.DateField()
    building = models.ForeignKey( building_list, to_field = "building_id" )

现在id是building_id,你可以这样做:

row = data( 
    oDate=oDate,
    building_id=building_id,
    content=content ,
)

以上是关于由于没有表实例,Django不允许向DB添加记录的主要内容,如果未能解决你的问题,请参考以下文章

如何在DJANGO里,向有外键的DB里插入数据

如何向不需要模型实例的模型添加函数?

使用 json 文件向 django 中的数据库添加一些记录

没有实例的 Django Formset

Django创建表时报错django.db.utils.InternalError: (1366问题解决记录

如何在使用 django admin 将记录插入数据库后添加功能?