我有球員和位置的模型。玩家與玩家當前所在的位置相關聯。您可以為玩家分配新位置,這就是為什么我需要它以某種形式使用它的原因。但在那種形式中,我看到 Position 是 position Object(見下圖),但我想在那里放置“Position.name”以查看選擇的名稱而不是該物件,但我不知道該怎么做。
感謝您的幫助。

模型.py
class Position(models.Model):
name = models.CharField(max_length=20)
short = models.CharField(max_length=2)
class Players(models.Model):
name = models.CharField(max_length=200)
positionId = models.ForeignKey(Position, on_delete=models.CASCADE, null=True, blank=True)
表格.py
class CompositionForm(ModelForm):
class Meta:
model = Players
fields = ("positionId", ... many more ... )
表格.html
<table id="nominated-player-table" class="table table-bordered" style="">
{% for form in formset.forms %}
{% if forloop.first %}
<thead>
<td colspan="15"
style="background-color: dimgray; color: white; border-top-right-radius: 15px; border-top-left-radius: 15px; border: none">
Nominovaní hrá?i
</td>
<tr>
{% for field in form.visible_fields %}
<th>{{ field.label|capfirst }}</th>
{% endfor %}
</tr>
</thead>
{% endif %}
<tr>
{% for field in form.visible_fields %}
<td>
{% if forloop.first %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{% endif %}
{{ field }}
</td>
{% endfor %}
</tr>
{% endfor %}
</table>
uj5u.com熱心網友回復:
您需要在模型中添加魔術方法__str__or __unicode__,因為 Django 本身不知道如何將模型實體轉換為字串,并將其表示為ModelName object
# In python 2.x you can uncoment next line.
# from __future__ import unicode_literals
class Position(models.Model):
name = models.CharField(max_length=20)
short = models.CharField(max_length=2)
def __unicode__(self):
return self.name
class Players(models.Model):
name = models.CharField(max_length=200)
positionId = models.ForeignKey(
Position, on_delete=models.CASCADE, null=True, blank=True)
def __unicode__(self):
return self.name
如果你需要更多的個性化,你可以label_from_instance在表單中使用:
class CustomModelChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj):
return 'The position with name %s' % obj.name
class CompositionForm(forms.ModelForm):
positionId = CustomModelChoiceField(queryset=Position.objects)
class Meta:
model = Players
fields = ("positionId", ... many more ... )
uj5u.com熱心網友回復:
前幾天我遇到了這個問題,但使用的是普通形式的 ModelChoiceField,而不是 ModelForm。您將 ModelChoiceField 子類化以覆寫選擇標簽生成。來自 Django 檔案:
from django.forms import ModelChoiceField
class MyModelChoiceField(ModelChoiceField):
def label_from_instance(self, obj):
return "My Object #%i" % obj.id
在您的情況下,包括obj.PositionId.name在標簽中
ModelForms 應該有類似的東西。檢查檔案。是的,modelform_factory有一個field_classes引數,因此您可以覆寫默認的 ModelChoiceField
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/349996.html
標籤:姜戈 django-forms
上一篇:如何從日期名稱(例如(星期一,星期二...)中獲取日期(07.11.2021)
下一篇:Django快取用戶物件
