Django ModelFormSets:在表单中显示每个模型对象以及字段值

问题描述 投票:0回答:1

这是我认为很容易的事情,但我还没有弄清楚。我有一个简单的模型,名为

Channel
。这是:

class Channel(models.Model):
    id = models.PositiveBigIntegerField(primary_key=True)

    name = models.CharField(max_length=100)
    disabled = models.BooleanField(default=False)

我希望用户能够查看按名称显示的所有频道,并选择要

disable
enable
的频道。我已经接近了,这是我的观点(简化):

def channel_setup(request):
    ChannelFormSet = modelformset_factory(
        models.Channel,
        fields=['disabled'],
        edit_only=True
    )
    formset = ChannelFormSet()
    context = {
        'formset': formset
    }
    return render(request, "channel_setup.html", context)

它的作用是为数据库中的每个通道显示一个复选框。完美的!问题是它们都被标记为“禁用:”,因此无法辨别哪个通道是哪个通道。

我想在每个复选框旁边按名称显示每个频道。我知道有一种方法可以更改标签,但我还没有弄清楚如何将标签设置为等于通道的名称字段值。 我可能可以用 javascript 做一些黑客魔法来实现它,但必须有一种方法可以用 Django 来做到这一点,对吧?

python python-3.x django django-models django-forms
1个回答
0
投票

我想通了,不妨发布给任何可能需要它的人。 在视图中,循环遍历每个表单和表单集中并将其分配给关联的通道名称。

def channel_setup(request):
    ChannelFormSet = modelformset_factory(
        models.Channel,
        fields=['disabled'],
        edit_only=True
    )
    formset = ChannelFormSet()

    for form in formset.forms:
        form.fields['disabled'].label = form.instance.name

    context = {
        'formset': formset
    }
    return render(request, "channel_setup.html", context)
© www.soinside.com 2019 - 2024. All rights reserved.