我搜索Django-way做一些非典型的功能(我认为)。我的env是Django 2.0.2,PostgreSQL 9.6和Python 3.6.4。所以,我的模型和形式如下:
# ./app/models.py
from users.models import User # custom user model
class SubscribeModel(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
phone = models.CharField(max_length=80)
# ./app/forms.py
class SubscribeForm(forms.Form):
phone = forms.EmailField(label='Phone Number', max_length=100)
此外,我对此模型的看法如下:
# ./app/views.py
from django.contrib.auth.mixins import LoginRequiredMixin
from users.models import User
class SubscribeView(LoginRequiredMixin, View):
login_url = '/login/'
redirect_field_name = 'redirect_to'
template_name = 'app/subscribe.html'
form_class = SubscribeForm
def post(self, request):
user = get_object_or_404(User, id=request.user.id)
form = self.form_class(request.POST, instance=user)
if form.is_valid():
form.save()
return redirect('/')
return render(request, self.template_name, {'client': user, 'form': form})
在保存表单后理解如何处理该逻辑会很棒:
Save
; login
页面(因为LoginRequiredMixin
); 我们在网上购物时可以看到这个功能:我们选择商品,添加到 我们的购物车,只有在以后,网站要求我们登录网站,如果我们不是(为了保存我们的订单)。
我认为,我的问题解决了将数据保存到request.session
并在登录后重新保存到数据库,但我不知道如何在我的代码上执行此操作并且这是正确的吗?我是Django的新手......但是!
答案 0 :(得分:0)
实际上使用request.session
存储数据而不将其保存到数据库是一种方法,如果你主要开发javascript AJAX frontent,你可以将它保存到localStorage
或sessionStorage
。 。但是如果你用django渲染每个视图,那么你可以更好地使用request.session
。考虑将对象的id存储在数组中的request.session
中,然后根据需要使用它,记住将其分配给JSON(json.dumps(list of ids)
),然后再将其分配给request.session
。