Django:如何在模型中正确使用外键?
Django: How to properly use the ForeignKey in a modelform?
我正在尝试在 Django 中创建一个 HTML 表单,我正在使用 Django modelforms 来执行此操作。在我的 models.py 文件中,我使用的是 "ForeignKey",这将被转换为带有 HTML 形式的选项的下拉菜单。这有效,我在我的视图中看到了一个下拉菜单。
models.py
class plants(models.Model):
name = models.CharField(max_length=300, blank=True)
active_account = models.ForeignKey('accounts')
class Meta:
unique_together = ('active_account', 'name')
class accounts(models.Model):
name = models.CharField(max_length=200)
url = models.CharField(max_length=200)
class PlantsForm(ModelForm):
class Meta:
model = plants
fields = '__all__'
My_Cool_Django_ModelForm.html
{% for field in form %}
{{ field.label_tag }}
{{ field|addcss:'form-control'}}
{% endfor %}
问题
假设我在数据库中有 2 个帐户,分别是 "Mister Foo" 和“Miss Bar”。如果我随后加载 HTML 表单,我会在下拉菜单中看到 2 个选项,但没有 "Mister Foo" 和 "Miss Bar"。它只与文本 "accounts object" 一起下降,我希望它显示名称。
所以我的问题是,我怎样才能在下拉列表中按名称显示帐户? :( 我试过现场。
为您的 accounts
使用 __unicode__
class:
class accounts(models.Model):
name = models.CharField(max_length=200)
url = models.CharField(max_length=200)
def __unicode__(self):
return self.name
顺便说一下,使用 accounts
作为 python class 名称是 糟糕的 代码风格。它应该是 capfirst 和单一形式,如 Account
。检查 pep8 doc 以获取约定详细信息。
我正在尝试在 Django 中创建一个 HTML 表单,我正在使用 Django modelforms 来执行此操作。在我的 models.py 文件中,我使用的是 "ForeignKey",这将被转换为带有 HTML 形式的选项的下拉菜单。这有效,我在我的视图中看到了一个下拉菜单。
models.py
class plants(models.Model):
name = models.CharField(max_length=300, blank=True)
active_account = models.ForeignKey('accounts')
class Meta:
unique_together = ('active_account', 'name')
class accounts(models.Model):
name = models.CharField(max_length=200)
url = models.CharField(max_length=200)
class PlantsForm(ModelForm):
class Meta:
model = plants
fields = '__all__'
My_Cool_Django_ModelForm.html
{% for field in form %}
{{ field.label_tag }}
{{ field|addcss:'form-control'}}
{% endfor %}
问题
假设我在数据库中有 2 个帐户,分别是 "Mister Foo" 和“Miss Bar”。如果我随后加载 HTML 表单,我会在下拉菜单中看到 2 个选项,但没有 "Mister Foo" 和 "Miss Bar"。它只与文本 "accounts object" 一起下降,我希望它显示名称。
所以我的问题是,我怎样才能在下拉列表中按名称显示帐户? :( 我试过现场。
为您的 accounts
使用 __unicode__
class:
class accounts(models.Model):
name = models.CharField(max_length=200)
url = models.CharField(max_length=200)
def __unicode__(self):
return self.name
顺便说一下,使用 accounts
作为 python class 名称是 糟糕的 代码风格。它应该是 capfirst 和单一形式,如 Account
。检查 pep8 doc 以获取约定详细信息。