如何在Django中自动填充和显示数据,从用户模型的字段到其他应用程序的另一个模型?

问题描述 投票:0回答:1

我是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模型看起来都一样,这是非常多余的。

感谢您的支持!

django view model
1个回答
0
投票

从setting.py导入获取用户模型

from django.contrib.auth import get_user_model

使用户成为外键

User= models.ForeignKey(get_user_model(),on_delete=models.CASCADE)
© www.soinside.com 2019 - 2024. All rights reserved.