我有一个注册表单,我想注册一个学生,实例化一个学生模型,并将其添加到该模型中。我有一个CustomUser模型,它被学生模型引用
客户用户模型
class CustomUser(AbstractUser):
email = models.EmailField(_('email address'), unique=True)
phone = models.CharField(max_length=150, null=True, blank=True)
address = models.CharField(max_length=200, null=True, blank=True)
profile_picture = models.ImageField(default='images/student.png', upload_to='profile_picture/', null=True, blank=True)
is_student = models.BooleanField(default=False)
is_moderator = models.BooleanField(default=False)
is_administrator = models.BooleanField(default=False)
def __str__(self):
return self.get_username()
学生模型
class Student(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
@property
def get_instance(self):
return self
def __str__(self):
return self.user.username
视图.py
from django.contrib.auth.models import Group
from student.models import Student
from quiz.forms import RegistrationForm
def register_student_view(request):
form = RegistrationForm()
if request.method == 'POST':
form = RegistrationForm(request.POST, request.FILES)
if form.is_valid():
user = form.save(commit=False)
user.is_student = True
user.save()
student = Student.objects.create(user=user)
student_group = Group.objects.get_or_create(name='STUDENT')
student.user.groups.add(student_group)
messages.success(request, 'Registration successful!')
return redirect('login')
form = RegistrationForm()
return render(request, 'accounts/register.html', {'form': form })
完全错误跟踪路径
Traceback (most recent call last):
File "/home/sharhan/DEV/PYTHON/LIVE PROJECTS/django-live/exams-app/venv/lib/python3.9/site-packages/django/db/models/fields/__init__.py", line 1823, in get_prep_value
return int(value)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'tuple'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/sharhan/DEV/PYTHON/LIVE PROJECTS/django-live/exams-app/venv/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/home/sharhan/DEV/PYTHON/LIVE PROJECTS/django-live/exams-app/venv/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/sharhan/DEV/PYTHON/LIVE PROJECTS/django-live/exams-app/student/views.py", line 29, in register_student_view
student.user.groups.add(student_group)
File "/home/sharhan/DEV/PYTHON/LIVE PROJECTS/django-live/exams-app/venv/lib/python3.9/site-packages/django/db/models/fields/related_descriptors.py", line 950, in add
self._add_items(
File "/home/sharhan/DEV/PYTHON/LIVE PROJECTS/django-live/exams-app/venv/lib/python3.9/site-packages/django/db/models/fields/related_descriptors.py", line 1126, in _add_items
target_ids = self._get_target_ids(target_field_name, objs)
File "/home/sharhan/DEV/PYTHON/LIVE PROJECTS/django-live/exams-app/venv/lib/python3.9/site-packages/django/db/models/fields/related_descriptors.py", line 1073, in _get_target_ids
target_ids.add(target_field.get_prep_value(obj))
File "/home/sharhan/DEV/PYTHON/LIVE PROJECTS/django-live/exams-app/venv/lib/python3.9/site-packages/django/db/models/fields/related.py", line 977, in get_prep_value
return self.target_field.get_prep_value(value)
File "/home/sharhan/DEV/PYTHON/LIVE PROJECTS/django-live/exams-app/venv/lib/python3.9/site-packages/django/db/models/fields/__init__.py", line 1825, in get_prep_value
raise e.__class__(
TypeError: Field 'id' expected a number but got (<Group: STUDENT>, False).
我不想直接使用CustomUser并直接从中呼叫用户。我不希望从CustomUser调用用户,而是希望用户位于学生模型中,该模型具有CustomUser的外键,然后我可以使用学生实例执行业务逻辑
^{} 实际上返回一个元组,该元组由对象和一个表示对象是否已创建的标志组成,因此您需要捕获这两个元组并只使用
student_group
对象:相关问题 更多 >
编程相关推荐