我有以下型号:Django的 - 渲染两款车型之间的关系作为一个单选按钮
class Profile(models.Model):
verified = models.BooleanField(default=False)
primary_phone = models.OneToOneField('Phone', related_name='is_primary', null=True, blank=True)
class Phone(models.Model):
profile = models.ForeignKey(Profile)
type = models.CharField(choices=PHONE_TYPES, max_length=16)
number = models.CharField(max_length=32)
@property
def is_primary(self):
return profile.primary_phone == self
而以下几种形式:
class PhoneForm(ModelForm):
class Meta:
from accounts.models import Phone
model = Phone
fields = ('type', 'number',)
其在modelformset_factory
使用。
我渲染表单集是这样的:
<div class="span-13 last">
{{ formset.management_form }}
{% for form in Phones %}
<div class="span-2">{{ form.type|add_class:'dropdown' }}</div>
<div class="span-11 last">{{ form.number|add_class:'phone-number' }}</div>
<div class="clearfix"></div>
{% endfor %}
</div>
现在我要做的就是呈现在模板单选按钮,以反映Phone
模型的is_primary
财产。有两种方法可以通过Phone
模型本身或通过Profile.primary_phone
来确定这种关系。但后来我将Phone
模型渲染为一个formset,因此循环遍历其实例,因此我试图在PhoneForm
字段中包含'is_primary'
字段,但它不起作用,因为它是属性。
任何想法如何做到这一点?
更新#1:
我已经使用JPIC方法,并试图呈现primary
单选按钮:
class PhoneForm(ModelForm):
primary = forms.BooleanField(widget=forms.RadioSelect(choices=((0, 'False'), (1, 'True'))))
class Meta:
from accounts.models import Phone
model = Phone
fields = ('primary', 'type', 'number',)
然而,它显示的Phone
每个实例两个单选按钮,而我需要它每个实例只显示一个单选按钮。我打算玩一会儿,看看能否正确显示它。
这不工作,空'Phone'形式'value'是'None'这样我就可以对其进行处理时,这是一个' POST'请求并检查它们是否有值。我希望尽量少用自定义编码/更多Django风格的方式。 – abstractpaper 2012-03-17 11:25:01
我喜欢你的第一个方法!我很好地修改模型,但是现在当我尝试渲染每个“Phone”实例的单选按钮时,它会为每个实例显示两个单选按钮(true/false)。我将在一分钟内编辑我的帖子,向你展示我的意思。 – abstractpaper 2012-03-17 21:59:48