我是Django的新手,现在我正在为注册用户和非注册用户开发支付应用程序项目。我的用户模型在纸质发票上有一些必填字段,如下所示:
#users/models.py
class User(AbstractBaseUser):
email = models.EmailField(max_length=255, unique=True)
name = models.CharField(max_length=100, blank=False, null=False)
phone = models.CharField(max_length=11, blank=False, null=False)
clientid = models.IntegerField(blank=True, null=False, unique=True)
注意,身份验证过程基于电子邮件地址,发票付款中的必填字段为“客户ID,电话,姓名”。另一个名为Payments的应用程序为未注册用户和经过身份验证的用户提供1个模型类,如下所示:
#payments/models.py
class Payment(models.Model):
invoiceid = models.IntegerField(blank=False, null=False)
name = models.CharField(max_length=50, blank=False, null=False)
amount = models.DecimalField(decimal_places=2, max_digits=20)
email = models.EmailField(max_length=255, blank=False, null=False)
phone = models.CharField(max_length=11, blank=False, null=False)
clientid = models.IntegerField(blank=True, null=False, unique=False)
对于这两种型号,我使用的都是脆皮表格,对于非注册用户,如果他们填写所有字段,则很容易付款。 (此操作使用了不同的模板)。我想要实现的是,当用户注册并要付款时,“姓名,电话和客户ID”之类的字段应自动填写,并且仅基于注册用户表以读取模式显示给用户。我应该使用的关系还是ForeignKey或其他?对于非注册用户,来自支付应用程序的forms.py文件如下所示:
#payments/forms.py
class PaymentRegister(forms.ModelForm):
invoiceid = forms.IntegerField(widget=forms.TextInput(attrs={"placeholder":"Invoice number"}))
name = forms.CharField(widget=forms.TextInput(attrs={"placeholder":"Name from the invoice"})
clientid = forms.IntegerField(widget=forms.TextInput(attrs={"placeholder":"Clientid from the invoice"}))
amount = forms.DecimalField(widget=forms.TextInput(attrs={"placeholder":"Total amount to pay"}))
email = forms.EmailField(widget=forms.TextInput(attrs={"placeholder":"[email protected]"}))
phone = forms.CharField(widget=forms.TextInput(attrs={"placeholder":"Phone number"}))
class Meta:
model = PaymentRegister
fields = ['invoiceid', 'name', 'clientid', 'amount', 'email', 'phone']
def save(self, commit=True):
payment = super(PaymentRegister, self).save(commit=False)
payment.invoiceid = self.cleaned_data['invoiceid']
payment.name = self.cleaned_data['cumparator']
payment.clientid = self.cleaned_data['clientid']
payment.amount = self.cleaned_data['suma']
payment.email = self.cleaned_data['email']
payment.phone = self.cleaned_data['telefon']
if commit:
payment.save()
return payment
我认为要注册付款:
#payments/views.py
def payment_register(request):
if request.method == 'POST':
form = PaymentRegister(request.POST)
if form.is_valid():
form.save()
amount = form.cleaned_data.get('amount')
invoiceid = form.cleaned_data.get('invoiceid')
email = form.cleaned_data.get('email')
return redirect('success')
else:
form = PaymentRegister()
return render(request, 'payments/payment.html', {'form':form})
我需要为注册用户创建新的模型以进行付款,如果答案为是,如何连接用户模型中的“客户ID,电话,姓名”字段以在发票模型中进行注册和显示?现在,对于非注册用户和注册用户,我的PaymentRegister模型看起来都一样,这是非常多余的。
感谢您的支持!
从setting.py导入获取用户模型
from django.contrib.auth import get_user_model
使用户成为外键
User= models.ForeignKey(get_user_model(),on_delete=models.CASCADE)