关于新增地址会报错
来源:6-10 实现 地址编辑
丛从绿草
2020-09-24 17:03:55
def address_list(request):
"""地址列表"""
my_addr_list = UserAddress.objects.all()
# (user=request.user, is_valid=True)
return render(request, 'address_list.html', {
'my_addr_list': my_addr_list
})
def address_edit(request, pk):
"""地址新增或编辑"""
# user = request.user
# my_addr_list = UserAddress.objects.filter(user=pk)
# print('my_addr_list', my_addr_list)
if request.method == 'POST':
form = UserAddressForm(request=request, data=request.POST)
print('form', form)
if form.is_valid():
form.save()
return redirect('accounts:address_list')
else:
form = UserAddressForm(request=request)
return render(request, 'address_edit.html', {
'form': form
})
# 地址列表
url(r'^users/address/list/$', views.address_list, name='address_list'),
# 地址修改和编辑 users/address/edit/add/ users/address/edit/12/
url(r'^users/address/edit/(?P<pk>\S+)/$', views.address_edit, name='address_edit'),
class UserAddress(common.CommonModel):
"""用户的地址信息"""
user = models.ForeignKey(User, related_name='user_address', on_delete=models.CASCADE) # 一对多
province = models.CharField('省份', max_length=32)
city = models.CharField('市区', max_length=32)
area = models.CharField('区域', max_length=32)
twon = models.CharField('街道', max_length=32, null=True, blank=True)
address = models.CharField('详细地址', max_length=64)
username = models.CharField('收件人', max_length=16)
phone = models.CharField('收件人的电话', max_length=32)
is_default = models.BooleanField('是否为默认地址', default=False)
is_valid = models.BooleanField('是否有效', default=True)
def get_phone_format(self):
"""格式化手机号码"""
return self.phone[0:3] + '****' + self.phone[7:]
def get_region_format(self):
"""省市区"""
# return "{0}{1}{2}{3}{4}".format(self.province, self.city, self.area, self.twon, self.address)
return "{self.province} {self.city} {self.area}".format(self=self)
class Meta:
db_table = 'accounts_user_address'
ordering = ['is_default', '-updated_at']
class UserAddressForm(forms.ModelForm):
"""地址新增或修改"""
region = forms.CharField(label='大区域选项', max_length=64, required=True,
error_messages={
'required': '请选择地址'
})
def __init__(self, request, *args, **kwargs):
super().__init__(*args, **kwargs)
self.request = request
class Meta:
model = UserAddress
fields = ['address', 'username', 'phone', 'is_default']
def clean_phone(self):
"""验证用户输入的手机号码"""
# 判断用户名是否为手机号码,验证失败触发forms.ValidationError异常
phone = self.cleaned_data['phone']
pattern = r'^[1-9]{1}[0-9]{10}$'
if not re.search(pattern, phone):
raise forms.ValidationError('请输入正确的手机号码')
return phone
def clean(self):
cleaned_data = super().clean()
# 查询当前登录用户的地址数据
addr_list = UserAddress.objects.filter(is_valid=True, user=self.request.user)
if addr_list.count() >= 20:
raise forms.ValidationError('最多只能添加20个地址')
return cleaned_data
def save(self, commit=True):
obj = super().save(commit=False)
region = self.cleaned_data['region']
# 省市区的数据
(province, city, area) = region.split('')
obj.province = province
obj.city = city
obj.area = area
obj.user = self.request.user
# 修改的时候,如果已经有了默认地址,当前也勾选了默认地址选项
# 需要把之前的地址都改为默认的地址
if self.cleaned_data['is_default']:
pass
obj.save()
我新增收获地址, 点击提交为什么会这样 ?! 让我真的忍无可忍。
1回答
同学,你好。访问新增地址页面是需要登录的,同学可以登录后再访问该页面
如果我的回答解决了你的疑惑,请采纳!祝学习愉快~~~~
相似问题