0

我正在做一个用户提交 ASCII 艺术的 django 项目。我的用户被命名为“艺术家”,他们的创作被命名为“艺术”,如下所示:

class Artist(models.Model):
    user        = models.OneToOneField(User)
    birthday    = models.DateField()
    name        = models.CharField(max_length=100)

def __unicode__(self):
    return self.name


class Art(models.Model):
    creator     = models.ForeignKey(User) 
    ...

def __unicode__(self):
    return self.title

(Artist 的 'user' 属性指的是默认的 django User 模型。)

我目前要做的是创建艺术并将当前登录的用户记录为艺术创作者。这是正在执行此操作的视图的片段:

from django.contrib.auth.models import User

def SubmitArt(request):

   art = Art(..., creator=request.user) 
   art.save()   

问题在于,这似乎只在我在项目开始时创建的初始超级用户登录时才有效。提交表单完成后,其他所有用户都会给我这个错误:

IntegrityError at /submit/
insert or update on table "artapp_art" violates foreign key constraint "artapp_art_creator_id_fkey"
DETAIL:  Key (creator_id)=(3) is not present in table "artapp_artist".

我的模型过去是这样写的:

    creator     = models.ForeignKey('Artist') 

(从来没有工作过)在我用南来改变它们之前。我假设这是我的数据库的问题,但我不确定如何修复它。我在 Windows 7 机器上使用 bitnami djangostack。非常感谢你。

4

1 回答 1

0

您能否验证artapp_art_creator_id_fkey外键约束是否仍指向Artist.id. 这就是错误所说的。您可能忘记运行南迁移,或者南可能未能更改约束。您需要查看实际的数据库才能找到答案。

另一方面,您的原始外键对我来说似乎更有意义。creator = models.ForeignKey('Artist')你改成的原因是什么User?你只需要确保你传递一个ArtisttoArt()而不是request.user.

于 2013-09-18T01:19:16.603 回答