2

選択したギャラリーを管理画面に表示したい。私はカスタム フィールドを作成する能力があまりなく、それに関する十分に文書化されたガイドラインを見つけることができませんでした。

私の質問に関しては、次のような基本的なクラスを作成しました。

class GalleryViewWidget(forms.TextInput):
    def render(self,name,value,attrs):
        rendered = super(GalleryViewWidget, self).render(name, value, attrs)
        return rendered + mark_safe(....)

class ProductModelForm(forms.ModelForm):
    information = forms.CharField(widget=forms.Textarea)
    gallery = GalleryViewWidget
    class Media:
        css = {
            'all': (settings.MEDIA_URL + 'css/preview.css',)
        }
        js=(
                "http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js",
                settings.MEDIA_URL + 'js/preview.js',
            )
    class Meta:
        model = Product

私の preview.js ファイルで、ajax リクエストを送信したいのですが、この ajax 呼び出しを処理する場所がわからないという問題があります。私の ProductModelForm で?

この ajax を処理する方法や、選択したギャラリーを管理者に表示する別の方法について誰かが私に知識を与えてくれれば、本当に感謝しています。

4

3 に答える 3

3

ここで、少し古いチュートリアルを見ました...独自のサムネイルを作成します。現在、サムネイルの生成と保存には「 sorl-thumbnail 」を使用する必要があり、それを保存するのは少し簡単で、より正しい方法です...

それにもかかわらず、これは admin で写真のプレビューを作成する方法のチュートリアルです。それを使用したり、AJAX 呼び出しで強化したりできます。しかし、私見は再び必要ではありません...

PS 最初からこのアプリの完全なソースをダウンロードすることをお勧めします。

だから... 記事:

Django チュートリアル: 写真整理と共有アプリ パート I. 管理者の強化。

于 2011-07-30T06:29:49.540 に答える
1

Admin/ModelForm Ajax ビューをどこに配置しますか? に答えます。あなたの質問の一部です。ギャラリーの部分については、photologueをご覧ください。

管理フォームから呼び出されるビューの作成に関しては、単純なカスタム ビューを作成するのが最も簡単であることがわかりました。Javascript コードでは{% url my_ajax_view %}、アプリに固有のデータを使用して呼び出すだけです。

例 (ajaxy 外部キー検索の修正版):

class ForeignKeySearchInput(forms.HiddenInput):
    """
    A Widget for displaying ForeignKeys in an autocomplete search input 
    instead in a ``select`` box.
    """
    [ ... stuff removed ... ]
    def render(self, name, value, attrs=None):
        [ ... snip ... ]
        context = Context({
            'search_url': reverse('tools_autocomplete_search'),
            'model_name': self.rel.to._meta.module_name,
            'app_label': self.rel.to._meta.app_label,
            [ ... snip ... ]
        })
        template = loader.get_template('admin/widgets/foreignkeysearchinput.html')
        return rendered + mark_safe(template.render(context))

ここで重要なのは、必要なデータをウィジェット テンプレートに渡すことです。ウィジェット テンプレートは、このデータを使用して ajax コールバックを正しく呼び出します。

実際のビューは、問題と同じくらい単純 (または複雑) です。

def ajax_search(request):
    """
    Searches in the fields of the given related model and returns the 
    result as a simple string to be used by the jQuery Autocomplete plugin
    """
    query = request.GET.get('q', None)
    app_label = request.GET.get('app_label', None)
    model_name = request.GET.get('model_name', None)
    search_fields = request.GET.get('search_fields', None)

    [ ... snip ... ]
    return HttpResponse(simplejson.dumps(data, indent=2))

別の方法として、ajax ビューを ModelAdmin サブクラス (または Mixin) に埋め込むこともできますが、django.contrib.adminルーティングの内部をいじりたくない場合は、上記の方がはるかに簡単です。

于 2011-08-05T06:58:05.440 に答える
1

Your widget (with extra feature of handling postfix in file name) might look like this:

class ImageThumbnailWidget(forms.FileInput):

    def __init__(self, postfix=None, attrs={}):
         self.postfix = postfix
         super(ImageThumbnailWidget, self).__init__(attrs)

    def render(self, name, value, attrs=None):
        output = []
        if value and hasattr(value, "url"):
            img_path = value.url.split('/')[:-1]
            img_path = "/".join(img_path)
            img_name = value.url.split('/')[-1]
            if self.postfix:
                name_parts = img_name.split(".")
                ext = name_parts.pop()
                img_name_start = "_".join(name_parts)
                img_name = "%s%s.%s" % (img_name_start, self.postfix, ext)
            output.append('%s<br/><img src="%s/%s" /> <br />%s ' % 
                (_('Currently:'), img_path, img_name, _('Change:')))
        output.append(super(ImageThumbnailWidget, self).render(name, value, attrs))
        return mark_safe(u''.join(output))

Hope it helps. If it doesn't fit your needs, write some more details and I'll try to figure out something (I'd like to know where exactly do you want to show the preview of gallery - is it "changelist" or "change_view" of product, where you have inline formset with images).

于 2011-08-02T22:58:41.597 に答える