【发布时间】:2018-06-24 06:40:00
【问题描述】:
在我的 Django 应用程序中,我想使用表单所在的“EventDetailView”视图在“事件”模型中减去 1 个“free_places”字段。每次表单OK(当用户订阅事件时),“free_places”字段应该减少1。
我不知道为什么我的代码不起作用。
我的看法:
class EventDetailView(DetailView, ModelFormMixin):
model = models.Event
form_class = forms.RegisterForm
context_object_name = 'event'
def get_success_url(self):
return reverse('events:list')
def get_initial(self):
return {'event': self.kwargs['pk']}
def post(self, request, *args, **kwargs):
form = self.get_form()
if form.is_valid():
self.object = self.get_object()
self.object.free_places - 1
self.object.save()
return self.form_valid(form)
else:
return self.form_invalid(form)
型号:
class Event(models.Model):
title = models.CharField(max_length=500)
date = models.DateField()
text = models.TextField()
image = FilerImageField(null=True, blank=True)
flag = models.ForeignKey(Flag)
free_places = models.IntegerField()
class Meta:
ordering = ['-date']
def __str__(self):
return self.title
@property
def slug(self):
return slugify(self.title)
def get_absolute_url(self):
return reverse('events:detail', args=[self.slug, self.id])
def get_model_id(self):
return self.id
class Register(models.Model):
event = models.ForeignKey(Event)
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
company = models.CharField(max_length=30, blank=True)
street = models.CharField(max_length=50, blank=True)
post_code = models.CharField(max_length=30, blank=True)
city = models.CharField(max_length=30, blank=True)
email = models.EmailField()
phone_number = models.IntegerField()
def __str__(self):
return self.first_name
def get_event_name(self):
return self.event
【问题讨论】:
-
什么不起作用?实际发生了什么?你预计会发生什么?
-
我希望在“事件”模型@Alasdair 中的“free_places”字段上的“RegisterForm”表单上按保存后减少 1
-
好的,那么当你按下保存时实际发生了什么?
EventDetailView是否运行?如果是这样,post方法是否运行?如果是,表格是否有效?尝试找出代码中的问题所在。 -
free_places的值与在表单上按保存之前相同。符合self.object.free_places - 1我有提示**声明似乎没有效果** @Alasdair -
您找到了问题所在。你没有对
self.object.free_places - 1的结果做任何事情,所以self.object.free_places的值保持不变。
标签: python django forms models