在使用DetailView(Django)访问之前更新对象

我在Django中使用DetailView。我有一个模型,包括一定的时间字段(taxi_time),我想比较时间和现在。如果taxi_time < datetime.now(),我想将模型中的字段(taxi_is_closed)从False更改为True。在使用DetailView(Django)访问之前更新对象

所以在用户访问帖子前,我需要(自动)检查时间并修改taxi_is_closed。我该怎么做?

View.py

@method_decorator(login_required(login_url='/login/'), name='dispatch') 

class RecruitView(PermissionRequiredMixin, generic.DetailView):

model = Recruit

template_name = 'taxi/recruit.html'

def has_permission(self):

return self.request.user.profile.email_confirmed

def handle_no_permission(self):

error_message = '아직 인증이 완료되지 않았습니다. 이메일 인증을 완료해주세요! :)'

if self.raise_exception:

raise PermissionDenied(self.get_permission_denied_message())

return render(self.request, 'taxi/info.html', {'error_message': error_message})

def get_context_data(self, **kwargs):

context = super(RecruitView, self).get_context_data(**kwargs)

#pdb.set_trace()

img_var = self.get_object().taxi_popnow*10 + self.get_object().taxi_poptot

img_name = str(img_var)

context['img_name'] = img_name

context['ApplyForm'] = ApplyForm()

return context

MY model.py

class Recruit(models.Model): 

taxi_time = models.TimeField('출발 시각')

taxi_is_closed = models.BooleanField('마감', default=False)

def chk_closed(self):

now = datetime.datetime.now()

taxi_datetime = datetime.datetime.combine(self.taxi_date, self.taxi_time)

is_full = self.taxi_poptot <= self.taxi_popnow

is_past = taxi_datetime <= now

if (is_full or is_past):

self.taxi_is_closed = True

else:

self.taxi_is_closed = False

self.save()

我只挑选相关的代码。

回答:

您可以覆盖get_object方法,拨打电话chk_closedRecruitView

class RecruitView(PermissionRequiredMixin, generic.DetailView): 

....

def get_object(queryset=None):

obj = super(RecruitView, self).get_object(queryset=queryset)

obj.chk_closed()

return obj

回答:

你可以做到这一点你get_context_data函数中:

def get_context_data(self, **kwargs): 

context = super(RecruitView, self).get_context_data(**kwargs)

#pdb.set_trace()

img_var = self.get_object().taxi_popnow*10 + self.get_object().taxi_poptot

img_name = str(img_var)

if self.object.taxi_time < datetime.now():

self.object.taxi_is_closed = True

self.object.save()

context['img_name'] = img_name

context['ApplyForm'] = ApplyForm()

return context

以上是 在使用DetailView(Django)访问之前更新对象 的全部内容, 来源链接: utcz.com/qa/260584.html

回到顶部