为什么我不能将自定义字段保存到另一个 table?
Why can't I save a custom field to another table?
我正在尝试学习本教程:https://simpleisbetterthancomplex.com/tutorial/2018/01/18/how-to-implement-multiple-user-types-with-django.html 关于如何在 Django 中处理多种用户类型。在根据我的需要调整它时,我很难让用户输入品牌字段以保存到供应商 table。使用我当前的 forms.py 代码,每个新用户都有一个空的“品牌”字段,因此无法正确保存。
class VendorSignUpForm(UserCreationForm):
"""Add brand name field to default vendor sign up."""
brand = forms.CharField(required = True)
class Meta(UserCreationForm.Meta):
"""Signup redef'd user."""
model = User
@transaction.atomic
def save(self):
"""
Atomically save user as vendor.
"""
user = super().save(commit = False)
user.is_vendor = True
user.save()
#make sure brand data saved by adding entry:
vendor = Vendor.objects.create(user = user)
vendor.brand = self.cleaned_data.get('brand')
return user
在研究了有关在 Django 中创建新对象并为自己进行测试后,我找到了答案。不确定教程为何有效,但我必须将“品牌”字段传递给 create() 方法。
class VendorSignUpForm(UserCreationForm):
"""Add brand name field to default vendor sign up."""
brand = forms.CharField(required = True)
class Meta(UserCreationForm.Meta):
"""Signup redef'd user."""
model = User
@transaction.atomic
def save(self):
"""
Atomically save user as vendor.
"""
user = super().save(commit = False)
user.is_vendor = True
user.save()
#make sure brand data saved by adding entry:
vendor = Vendor.objects.create(user = user, brand = self.cleaned_data['brand'])
#vendor.brand = "test" #self.cleaned_data['brand'] #.get('brand')
return user
将字段分配给现有的数据库条目不会改变任何内容(我之前就是这样做的)。
我正在尝试学习本教程:https://simpleisbetterthancomplex.com/tutorial/2018/01/18/how-to-implement-multiple-user-types-with-django.html 关于如何在 Django 中处理多种用户类型。在根据我的需要调整它时,我很难让用户输入品牌字段以保存到供应商 table。使用我当前的 forms.py 代码,每个新用户都有一个空的“品牌”字段,因此无法正确保存。
class VendorSignUpForm(UserCreationForm):
"""Add brand name field to default vendor sign up."""
brand = forms.CharField(required = True)
class Meta(UserCreationForm.Meta):
"""Signup redef'd user."""
model = User
@transaction.atomic
def save(self):
"""
Atomically save user as vendor.
"""
user = super().save(commit = False)
user.is_vendor = True
user.save()
#make sure brand data saved by adding entry:
vendor = Vendor.objects.create(user = user)
vendor.brand = self.cleaned_data.get('brand')
return user
在研究了有关在 Django 中创建新对象并为自己进行测试后,我找到了答案。不确定教程为何有效,但我必须将“品牌”字段传递给 create() 方法。
class VendorSignUpForm(UserCreationForm):
"""Add brand name field to default vendor sign up."""
brand = forms.CharField(required = True)
class Meta(UserCreationForm.Meta):
"""Signup redef'd user."""
model = User
@transaction.atomic
def save(self):
"""
Atomically save user as vendor.
"""
user = super().save(commit = False)
user.is_vendor = True
user.save()
#make sure brand data saved by adding entry:
vendor = Vendor.objects.create(user = user, brand = self.cleaned_data['brand'])
#vendor.brand = "test" #self.cleaned_data['brand'] #.get('brand')
return user
将字段分配给现有的数据库条目不会改变任何内容(我之前就是这样做的)。