【问题标题】:Django- Error when creating intermediate many to many modelDjango-创建中间多对多模型时出错
【发布时间】:2016-03-10 22:23:23
【问题描述】:

我目前正在编写一个 Django 应用程序,其中一项功能涉及用户能够向其他用户发送邀请,其中每个邀请都将存储在邀请数据库表中。为了做到这一点,我遵循了docsblog post 中提供的结构。以下是用户模型和邀请模型(中间模型):

class User(models.Model):
    email = models.EmailField()
    full_name = models.CharField(max_length = 120, blank = True, null = True)
    timestamp = models.DateTimeField(auto_now_add = True, auto_now = False)
    updated = models.DateTimeField(auto_now_add = False, auto_now = True)
    invites = models.ManyToManyField('self', through = 'Invite', 
        symmetrical = False )

    def __unicode__(self):
        return self.full_name

class Invite(models.Model):
    sender_id = models.Foreignkey(User, on_delete = models.CASCADE )
    recipient_id = models.Foreignkey(User,on_delete = models.CASCADE)
    concert_id = models.AutoField()
    artist_id = models.AutoField()
    message = models.CharField(max_length = 120, blank = True, null = True)
    date_sent = models.DateTimeField(auto_now_add = True, auto_now = False)

由于某种原因,当我尝试运行 DB 迁移时,我收到一个属性错误,指出模块对象没有属性 Foreignkey,参考定义 sender_id 的行。根据文档中提供的代码,模型对象确实具有属性 Foreignkey,那么可能是什么问题?

【问题讨论】:

  • 与问题无关,但 django 已经有一个标准的用户模型。如果您要使用身份验证或类似的东西,您应该考虑根据您的个人需求扩展它,而不是创建一个全新的,甚至创建一个包含所有额外信息的新模型(不在标准用户模型中)和一个指向用户模型的 OneToOneField。

标签: python mysql django database-migration


【解决方案1】:

问题是ForeignKey是用大写字母K写的,如:

sender_id = models.ForeignKey(User, on_delete = models.CASCADE)

这应该可以解决这个问题,但您可能还必须为一个或两个外键添加一个 related_name 属性,因为它们都指向同一个模型 (Why cannot use 2 separate foreign keys for same model in django model)

【讨论】:

  • 谢谢,修复了外键无法识别的错误。我按照您包含的链接中的说明为用户模型的每个实例使用相关名称,现在出现了名称错误。
  • @loremIpsum1771 如果你还没有解决它,那就开始一个新问题,我会找到它的 :)
  • 感谢您的帮助。 Here 是我现在正在处理的问题:
  • @loremIpsum1771 在那里留下了我的答案 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-28
  • 1970-01-01
  • 2019-02-26
  • 2019-12-16
相关资源
最近更新 更多