簡體   English   中英

將表單中的數據保存到 2 個模型中

[英]Save data from form into 2 models

我正在使用 Django 創建一個注冊和登錄應用程序。 我使用表單和 POST 獲取數據。 我想將表單數據保存到兩個 Django 模型中:

class Customer(models.Model):
    username = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)
    name = models.CharField(max_length=200, null=True)
    email = models.CharField(max_length=200)

    def __str__(self):
        return self.name

和 Django 用戶 model。

forms.py

from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User

from .models import *


class CreateUserForm(UserCreationForm):
    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2']

注冊視圖.py

def registerPage(request):
    form = CreateUserForm()

    if request.method == 'POST':
        form = CreateUserForm(request.POST)
        form2 = Customer
        print(form)
        if form.is_valid():
            form.save()
            user = form.cleaned_data.get('username')
            name = form.cleaned_data.get('username')
            email = form.cleaned_data.get('email')
            form2.save(user, name, email)
            messages.success(request, 'Account was created for ' + user)

            return redirect('login')

    context = {'form': form}
    return render(request, 'login/register.html', context)

現在我的問題是,如何將表單數據保存到用戶模型中並將數據(用戶、姓名、電子郵件)保存到客戶 model 中?

我嘗試使用 form2.save(user, name, email) 但我收到一條錯誤消息:

'str' object 沒有屬性 '_meta'

感謝您的幫助!

編輯:我嘗試了@Moha369 的解決方案,但現在我收到一條錯誤消息:無法分配“'test1.2'”:“Customer.username”必須是“用戶”實例

從技術上講,這是不可能的,因為您之前在表單創建的元中聲明了 model。

但我認為最簡單的解決方案可能是從清理過的數據中創建一個新的 object。

user = form.cleaned_data.get('username')
name = form.cleaned_data.get('username')
email = form.cleaned_data.get('email')
obj = Customer(username = user, name = name, email = email)
obj.save()
form.save()

編輯我很抱歉我錯過了用戶名是用戶 object 的部分,編輯答案:

user = form.cleaned_data.get('username')
name = form.cleaned_data.get('username')
email = form.cleaned_data.get('email')
u = form.save()
obj = Customer(username = u, name = name, email = email)
obj.save()

這里發生的是save()方法返回我們剛剛保存的 object,所以我們將它分配給u並用它來創建新的 object。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM