我正在使用MySQL数据库创建Django应用程序。我在查看特定表的详细视图时遇到了问题。我有一个表EMAILS,其中包含USERNAME列,它是EMAILS的主键,也是第二个表PLAYERS的外键和主键。
CREATE TABLE Emails(
Username varchar(30) PRIMARY KEY,
Email varchar (30) UNIQUE NOT NULL,
Pass_field varchar (15),
Registered date,
User_Type varchar (15) NOT NULL
);
CREATE TABLE Players(
Real_Name varchar (30),
Handle varchar (30) NOT NULL,
Username varchar (30) PRIMARY KEY,
Birth date,
Nationality varchar (5),
foreign key(Username) references Emails(Username)
);
class Emails(models.Model):
email = models.CharField(max_length=30L, db_column='Email')
username = models.CharField(max_length=30L, primary_key=True, db_column='Username')
pass_field = models.CharField(max_length=15L, db_column='Pass_Field', blank=True)
registered = models.DateField(null=True, db_column='Registered', blank=True)
user_type = models.CharField(max_length=15L, db_column='User_Type')
def __unicode__(self):
return self.username
class Meta:
db_table = 'emails'
class Players(models.Model):
real_name = models.CharField(max_length=30L, db_column='Real_Name', blank=True)
handle = models.CharField(max_length=30L, db_column='Handle')
username = models.ForeignKey(Emails, primary_key=True, db_column='Username')
birth = models.DateField(null=True, db_column='Birth', blank=True)
nationality = models.CharField(max_length=5L, db_column='Nationality', blank=True)
def __unicode__(self):
return self.username
class Meta:
db_table = 'players'
这些是MySQL和Django模型,我认为它们是正确的并且彼此一致。
在显示表格列表视图的页面中,每行都有一个链接,指向该对象的详细视图。我这样使用这样的URL模式
url(r"^player/(?P<pk>\w+)/$", views.PlayerView.as_view(), name='player'),
PlayerView定义如下:
class PlayerView(generic.DetailView):
model = Players
template_name = 'dotapp/player.html'
链接看起来像这样:
/player/{{ player.username.username }}" *HTML omitted
此方法适用于我的应用程序中具有自己的(非外部)主键的其他表,但是对于PLAYER,它返回我的模板而没有任何信息。对我来说,这表明检索了一个对象,但由于某种原因,不显示相关数据。最后,我的模板如下所示:
{% extends 'dotapp/base.html' %}
{% block content %}
<h1>Player: {{ player }}</h1>
<p>
<strong>Name:</strong> {{ player.real_name }}
</p>
<p>
<strong>Handle:</strong> {{ player.handle }}
</p>
<p>
<strong>Email:</strong> {{ player.username.email }}
</p>
<p>
<strong>Birth:</strong> {{ player.birth }}
</p>
<p>
<strong>Nationality:</strong> {{ player.nationality }}
</p>
{% endblock %}
我可以使用python shell查看丢失的数据,但我不知道为什么它不会显示在我的PLAYER模板上。有人可以帮忙吗?
答案 0 :(得分:0)
传递到模板中的对象的默认名称为object
,因此要么更改模板中对player
的引用,要么将context_object_name
添加到基于类的视图中:< / p>
class PlayerView(generic.DetailView):
model = Players
template_name = 'dotapp/player.html'
context_object_name = 'player'