我正在使用 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 模板上。任何人都可以帮忙吗?