1

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

4

1 回答 1

0

传递给模板的对象的默认名称将是object,因此要么更改player模板中的引用,要么添加context_object_name到基于类的视图中:

class PlayerView(generic.DetailView):
    model = Players
    template_name = 'dotapp/player.html'
    context_object_name = 'player'
于 2013-10-08T11:39:06.043 回答