我对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 /南方版本
感谢您的帮助:)
答案 0 :(得分:0)
我只能猜测:
TicketsTrader具有Inscription的外键,该外键具有User的外键并在其__unicode__()
方法中使用该键。
现在,我不知道Grapelli,但默认的管理员应用会在Add TicketsTrader页面上呈现Inscription-s的下拉列表。如果某些Inscription
- s指向不存在的User
- s,则其__unicode__()
方法将失败,并显示您指定的错误消息。
问题是如何丢失某些User
- 并且Inscription
- 不指向它们。好吧,如果你使用例如MySQL + MyISAM,外键没有强制执行,所以各种奇怪的事情都可能发生。
答案 1 :(得分:0)
我认为因为您没有任何用户...尝试在创建Ticket Trader之前创建用户