使用ForeignKey引用时出现Django错误

时间:2012-06-24 21:03:14

标签: python django foreign-keys admin

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

这是我的代码的一部分:

App ticketTrader

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)
    ...

App题词

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管理员中的“Add Ticket Trader”界面时,收到错误消息:

  

用户匹配查询不存在。

     

获取,第366行中的Python27 \ lib \ site-packages \ django \ db \ models \ query.py

     

在template \ grappelli \ templates \ admin \ includes \ fieldset.html中,出错   在第19行

我想得到的是:在我的ticketTrader表的“题词”栏中,获取我的“铭文”表格的唯一ID(pk)的值。

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

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

感谢您的帮助:)

2 个答案:

答案 0 :(得分:0)

我只能猜测:

TicketsTrader具有Inscription的外键,该外键具有User的外键并在其__unicode__()方法中使用该键。

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

问题是如何丢失某些User - 并且Inscription - 不指向它们。好吧,如果你使用例如MySQL + MyISAM,外键没有强制执行,所以各种奇怪的事情都可能发生。

答案 1 :(得分:0)

我认为因为您没有任何用户...尝试在创建Ticket Trader之前创建用户