0

Ubuntu 12.04でPython 2.7でDjango 1.4を使用しています。

製品と各製品の製品機能のリストを表示することになっているテンプレートがありますが、何らかの理由で機能がテンプレートに表示されません。

ビューは次のとおりです。

@login_required
def view_products(request):
    """
    ..  function:: view_products()

        View the Products

        :param request: Django Request object
    """

    data = { 'user' : request.user }
    if (request.user.is_authenticated() and request.user.is_superuser):
        products = Products.objects.all()

        add_feature_form = rsb.forms.AddProductFeatureForm();
        data.update({ 'form' : add_feature_form })
        data.update({ 'products' : products })
        data.update(csrf(request))

        return render_to_response("view_products.html", data)

    return render_to_response("index.html", data)

製品機能を操作するテンプレートの一部を次に示します。

<table>
    {% for product in products %}
        <tr>
            <td align="right">Product Name:</td><td>{{ product.name }}</td>
        </tr>
        <tr>
            <td align="right">Price:<br /></td><td>${{ product.price }}</td>
        </tr>
        <tr>
            <ul>
            {% for productfeature in product.productfeature_set.all %}
                <form action="/removeProductFeature/" method="post">{% csrf_token %}
                <li>
                    {{ productfeature.feature }}
                    <input type="hidden" name="feature" value={{ productfeature.feature }}>
                    <input type="hidden" name="product_id" value={{ product.id }}>
                    <label class="formlabel">&nbsp;</label><input type="submit" value="Remove  &#9658;">
                </tr>
                </form>
            {% endfor %}
            </ul>
        </tr>
        <tr>
            <form action="/addProductFeature/" method="post">{% csrf_token %}
            <table>
                <tr>
                    <td align="right"><label class="formlabel">Add Feature:<br /></label></td><td>{{ form.feature }}</td>
                </tr>
                <input type="hidden" name="product_id" value={{ product.id }}>
                <tr>
                    <td align="right"><label class="formlabel">&nbsp;</label></td><td><input type="submit" value="Add  &#9658;"></td>
                </tr>
            </form>
            </table>
        </tr>
   {% endfor %}
</table>

基本的に、このテンプレートは製品を表示する必要があります。各機能はその下にリストされ、その機能を「削除」するオプションがあります。次に、下部に、追加機能を追加できるフィールドがあります。

既存の機能はまったく表示されません。私が間違っているかもしれないことについて何か提案はありますか?

更新 1:

テンプレートsに がありませんでした。 product.productfeatures_set.allありませんproduct.productfeature_set.all。準備万端です。皆さんありがとう!

4

2 に答える 2

3

これをしないでください:

product_features = []
for product in products:
    features = ProductFeatures.objects.filter(product = product)
    product_features.append(features)
    product.features = product_features

代わりに、products 変数をテンプレート コンテキストに渡すだけです。

そして、テンプレートで次のことを行います。

{% for product in products %}
    Product id: {{ product.pk }}
    {% for productfeature in product.productfeature_set.all %}
        {{ productfeature.feature }}
    {% endfor %}
{% endfor %}

productfeature_setを尋ねますか (または、:D に尋ねてほしいと思います)、それは非常に良い質問です。パニックにならないでください。すべて文書化されています。

これにより、サブクエリが生成されます。解決策は、 prefetch_relatedを使用することです。でも、今のところは気にする必要はないと思います:)

于 2012-10-24T12:21:25.257 に答える
1

はい、すでに Django に組み込まれているものを実装しようとしています!

django の逆の関係でビルドを使用する必要があります。

# give an Product instance product
# this should work
product.productfeature_set.all()

これはテンプレート a からアクセスでき、product.productfeature_set.all 繰り返し処理できます。

于 2012-10-24T12:23:29.640 に答える