1

次のクラス階層があります。

class ProfileUpdateView( UpdateView, LoggerMixin ):

    def get_context_data(self, **kwargs):
        context = super(ProfileCreateView, self).get_context_data(**kwargs)
        ...
        return context

UpdateView は実際には django.views.generic.UpdateView です

class EventViewMixin(object):
    template_name = ...
    model = Event
    form_class = ...

    def get_success_url(self):
        return self.success_url + str(self.object.id)

クラス UpdateEventView は、ProfileUpdateView と EventViewMixin を混合します

class UpdateEventView(ProfileUpdateView, EventViewMixin):

    def form_valid(self, form):
        ...
        return super(UpdateEventView, self).form_valid(form)

フレームワークが UpdateEventView を使用しようとすると、何らかの理由で「model=Event」フィールドがフレームワークに表示されないという問題があります。だから私はエラーが発生します:

UpdateEventView にクエリセットがありません。UpdateEventView.model、UpdateEventView.queryset を定義するか、UpdateEventView.get_object() をオーバーライドします。

私は何が欠けていますか?

免責事項: 私は Python/Django の初心者のようなものです。

4

1 に答える 1

1

だから私の質問はばかげています...問題はミックスインの順序です:

class UpdateEventView(ProfileUpdateView, EventViewMixin):
    ....

次のものに置き換える必要があります。

class UpdateEventView( EventViewMixin, ProfileUpdateView ):

これは、ProfileUpdateView の継承ツリーにフィールド "model=None" があり、ProfileUpdateView が最初の位置にある場合、その値が考慮されるためです。EventViewMixin が最初に来る場合、正しい値が取得されます。

于 2012-11-16T11:06:27.480 に答える