python - 带有 ForeignKey 引用的 Django 错误

标签 python django foreign-keys admin

我对 django 的 ForeignKey 引用问题有疑问。

这是我的代码的一部分:

App ticketsTrader

class TicketsTrader(models.Model):
    seller = models.ForeignKey(User, related_name='ticketsTrader_seller')
    buyer = models.ForeignKey(User, related_name='ticketsTrader_buyer')
    inscription = models.ForeignKey(Inscription)
    transactionCode = models.CharField(max_length=30,blank=False,null=False)
    ...

应用题词

class Event(models.Model):
    title = models.CharField(max_length=75)
    description = models.TextField()
    ...

class Inscription(models.Model):
    event = models.ForeignKey(Event)
    packs = models.ManyToManyField(PackChoise)
    user = models.ForeignKey(User)
    ...

    def __unicode__(self):
        return self.event.__unicode__() + u': ' + self.user.__unicode__()

    def inscriptionKey(self):
        return str(self.pk) + '_' + str(self.valkey)

但是当我尝试访问我的 Grapelli 管理员中的“添加票证交易者”界面时,我收到一条错误消息:

User matching query does not exist.

Python27\lib\site-packages\django\db\models\query.py in get, line 366

In template \grappelli\templates\admin\includes\fieldset.html, error at line 19

我想要得到的是:在我的 ticketTrader 表的“inscription”列中获取我的“Inscription”表的唯一 ID (pk) 的值。

或者“inscriptionKey”的值,但我认为这是不可能的。

Django 版本:1.4/Python 版本:2.7.3/南方最新版本

感谢您的帮助:)

最佳答案

我只能猜测:

TicketsTrader 有一个指向 Inscription 的外键,它有一个指向 User 的外键,并在其 __unicode__() 方法中使用该键。

现在,我不知道 Grapelli,但默认的管理应用程序会在添加 TicketsTrader 页面上呈现 Inscription-s 的下拉列表。如果某些 Inscription-s 指向不存在的 User-s,那么它们的 __unicode__() 方法将失败并显示错误消息指定。

问题是某些 User-s 怎么会丢失,而 Inscription-s 却没有指向它们。好吧,如果你使用例如MySQL+MyISAM,那里没有强制执行外键,所以可能会发生各种奇怪的事情。

关于python - 带有 ForeignKey 引用的 Django 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11181171/

相关文章:

python - 如何在 python 社交身份验证中通过 facebook uid 查找用户?

python - Django allauth - 没有社交用户的验证电子邮件

python - SQLAlchemy - 有没有办法查看当前 session 中的内容?

python - 是否可以用每组中的观察次数来注释 seaborn fiddle 图?

python - 你如何在 python tkinter 中重叠小部件/框架?

python - Django 中的自定义查询和模型

django - 如何过滤模板标签?

java - Derby 外键约束

sql - 通常在 POSTGRES 中删除外键

mysql - 直接从外键到外键连接表