草庐IT

python - 在Django模板中以另一条记录的字段内容为标签显示未知数量的字段

coder 2023-08-24 原文

我有一个 Django 应用程序,我希望能够在多个实例中使用它。一个模型(Listing)可以有可变数量的字段(针对不同的实例),但是对于实例总是会有那些额外的字段。我想通过管理员添加这些额外的字段,所以我创建了这样的模型:

class BespokeField (models.Model):
    name = models.CharField(
        max_length = 20,
        verbose_name = "Field Title"
    )

    def __unicode__(self):
        return self.name

class Listing (models.Model):
    name = models.CharField (
        verbose_name = 'Listing',
        max_length = 30
    )
    slug = models.SlugField (
        verbose_name = "Slug",
        allow_unicode = True,
        unique=True,
        blank=True,
        null=True
    )

class ListingBespokeField (models.Model):
    bespoke_field = models.ForeignKey(BespokeField)
    listing = models.ForeignKey(Listing)
    value = models.CharField (
        max_length = 60
    )

    def __unicode__(self):
        return u'%s | %s' % (self.listing.name, self.bespoke_field.name)

理论是管理员指定定制字段,然后将这些字段以表单形式显示给用户。在 admin 中,这是相对简单的,因为我可以假设用户有一点点情报,所以我的 admin.py 看起来像:

class ListingBespokeFieldInline(admin.TabularInline):
    model = ListingBespokeField
    extra = len(BespokeField.objects.all())
    max_num = len(BespokeField.objects.all())

class ListingAdmin(admin.ModelAdmin):
    inlines = [ListingBespokeFieldInline]

这确实意味着管理员用户必须从下拉列表中选择每个 BespokeField 之一,但我对此并不感到不自在,因为通过使用 unique_together 确保只有一个。

我不知道如何以友好的方式将其呈现给非管理员用户。我想要的是 BespokeField.name 作为 ListingBespokeField.value 的标签显示在表单上。

这就是我在 forms.py 中的内容(用于 ListingBespokeField)。

class ListingBespokeFieldInline(forms.ModelForm):
    class Meta:
        model = ListingBespokeField
        exclude =['id']
        widgets = {
            'bespoke_field' : forms.HiddenInput(),
            'value' : forms.TextInput(attrs={'class' : 'form-control'})
        }

class ListingBespokeFieldForm(forms.ModelForm):
    class Meta:
        model = ListingBespokeField
        exclude = ()

BESPOKE_FIELD_COUNT = len(BespokeField.objects.all())

ListingBespokeFieldInlineFormSet = forms.inlineformset_factory (
    Listing,
    ListingBespokeField,
    form=ListingBespokeFieldInline,
    extra = BESPOKE_FIELD_COUNT,
    max_num = BESPOKE_FIELD_COUNT,
    exclude = ['id'],
    can_delete=False,
    can_order=False
)

然后我尝试通过如下模板呈现它:

<table class="table">
    {{ bespokefields.management_form }}

    {% for form in bespokefields.forms %}
        {% if forloop.first %}
        <thead>
            <tr>
                {% for field in form.visible_fields %}
                    <th>{{ field.label|capfirst }}</th>
                {% endfor %}
            </tr>
        </thead>
        {% endif %}
        <tr class="formset_row bespokefield">
            <td>
                {{ form.listing }}{{ form.id }}{{ form.bespoke_field }}
                {{ form.bespoke_field.label }}
            </td>
            <td>{{ form.value }}</td>
        </tr>
    {% endfor %}
</table>

这行不通。我可以使用一些见解。

最佳答案

这是我的解决方案:

<table class="table">
    {{ bespokefields.management_form }}

    {% for form in bespokefields.forms %}
        <tr class="formset_row bespokefield">
            <td>
                {{ form.listing }}{{ form.id }}
                <select id="id_listingbespokefield_set-{{ forloop.counter0 }}-bespoke_field" name="listingbespokefield_set-{{ forloop.counter0 }}-bespoke_field" class="form-control">
                {% with forloop.counter as counter %}
                    {% for x,y in form.fields.bespoke_field.choices %}
                        {% if counter == forloop.counter0 %}
                            <option value="{{x}}" selected>{{y}}</option>
                        {% endif %}
                    {% endfor %}
                {% endwith %}
                </select>
            </td>
            <td>{{ form.value }}</td>
        </tr>
    {% endfor %}
</table>

关于python - 在Django模板中以另一条记录的字段内容为标签显示未知数量的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46792118/

有关python - 在Django模板中以另一条记录的字段内容为标签显示未知数量的字段的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby-on-rails - Rails 编辑表单不显示嵌套项 - 2

    我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib

  3. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  4. ruby - 将数组的内容转换为 int - 2

    我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]

  5. ruby - 在院子里用@param 标签警告 - 2

    我试图使用yard记录一些Ruby代码,尽管我所做的正是所描述的here或here#@param[Integer]thenumberoftrials(>=0)#@param[Float]successprobabilityineachtrialdefinitialize(n,p)#initialize...end虽然我仍然得到这个奇怪的错误@paramtaghasunknownparametername:the@paramtaghasunknownparametername:success然后生成的html看起来很奇怪。我称yard为:$yarddoc-mmarkdown我做错了什么?

  6. ruby - 通过 erb 模板输出 ruby​​ 数组 - 2

    我正在使用puppet为ruby​​程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby​​不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这

  7. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  8. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  9. ruby-on-rails - 使用 Sublime Text 3 突出显示 HTML 背景语法中的 ERB? - 2

    所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择

  10. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

随机推荐