1

'Favorites'モデルをクエリしてユーザーがお気に入りのアイテムのリストを取得しようとすると、別のモデルに対してクエリを実行してそのクエリからオブジェクトを取得し、テンプレートに表示しようとしますが、エラーが発生します: "invalid基数10"のint()のリテラル

そのエラーの他のすべてのインスタンスを調べてみると、アスカーが実際に整数のコンマ区切りリストを処理したいと思っているものが見つからなかったので、ちょっと戸惑っています。

モデル

class Favorite(models.Model):
    # key should be the model name, id is the model.id, and user is the User object.
    key     = models.CharField(max_length=255, unique=True)
    val     = models.IntegerField(default=0)
    user    = models.ForeignKey(User)

    class Admin:
            list_display = ('key', 'id', 'user')

意見

def index(request):
    favorites = Favorite.objects.filter(key='blog', user=request.user.pk)
    values = ""

    for favorite in favorites:
            values += "%s," % favorite.val
    #values = "[%s]" % values

    blogs = Blog.objects.filter(pk__in=values)

    return render_to_response('favorite/index.html',
            {
                    "favorites"     : favorites,
                    "blogs"         : blogs,
                    "values"        : values,
            },
            context_instance=RequestContext(request)
    )

enter code here
4

2 に答える 2

2

検討したいことは、これをDjango ContentTypesフレームワークを使用するように変換することです。これにより、いくつかの優れたシンタックスシュガーが提供されます...

class Favorite(models.Model):
    # former 'key' field
    content_type = models.ForeignKey(ContentType)
    # former 'value' filed
    object_id = models.PositiveIntegerField()

    # this gives access directly to the object that content_type+object_id represent
    content_object = generic.GenericForeignKey()

    user    = models.ForeignKey(User)

ビューは次のようになります。

def index(request):

    favorites = Favorite.objects.filter(
        content_type=ContentType.objects.get_for_model(Blog),
        user = request.user
    )

    return render_to_response('favorite/index.html', 
        { "favorites" : favorites, },
        context_instance=RequestContext(request)
    )

テンプレートで、を列挙するfavoritesと、返される各モデルには、 ....content_objectのインスタンスとなるプレゼントが含まれます。Blog

{% for fav in favorites %}
    {# This would print the blog title for every favorite #} 
    {{ fav.content_object.title }}<br/>
{% endfor %}
于 2010-04-16T02:34:55.513 に答える
1

pk__inは、値のコンマ区切りリストを含む文字列を取りません。実際には、値のリストを含む列挙可能(リストまたはタプル)を取ります。代わりに、次のようにします。

values = [favorite.val for favorite in favorites]

forあなたが持っているループの代わりに。私はそれがあなたが持っているものを修正するはずだと思います、しかしあなたがトレースバックを投稿しなかったので、またはそれがどの行でエラーになるのか私は完全に確信できません。

また、別のテーブルのIDをに格納するIntegerField代わりに、可能であれば、それを外部キーにリファクタリングすることを検討する必要があります。

于 2010-04-16T02:27:51.687 に答える