[英]How to define the foreign key relationship?
我是 django 和数据库概念的新手。
当我尝试通过前端注册学生时收到 1042 错误代码,但不知道我的错误在哪里
如果有人可以提供帮助,那就太好了。
我尝试了不同的方法,但没有一个是有益的。
我可以通过 django 的管理面板添加学生,但不能通过前端执行相同的操作。
模型.py
class Session(models.Model):
session = models.CharField(max_length=150, default=" ")
def __str__(self):
return self.session
def get_absolute_url(self):
return reverse('datapage')
class Student(models.Model):
user = models.OneToOneField(User, on_delete = models.CASCADE, primary_key = True)
phone_number = models.CharField(max_length=20, blank = True)
semester = models.CharField(max_length=20, blank = True)
session_year = models.ForeignKey(Session, on_delete = models.CASCADE)
def __str__(self):
return str(self.user)
forms.py
session_years = Session.objects.all()
session_year_list = []
for session_year in session_years:
single_session_year = (session_year.id, session_year.session)
session_year_list.append(single_session_year)
class StudentSignUpForm(UserCreationForm):
first_name = forms.CharField(required=True)
last_name = forms.CharField(required=True)
email = forms.EmailField(required=True)
username = forms.CharField(required=True)
phone_number = forms.CharField(required=True)
semester = forms.CharField(required=True)
def clean_email(self):
email = self.cleaned_data.get('email')
email = email.lower()
if User.objects.filter(email__iexact=email).exists():
raise forms.ValidationError('A user has already registered using this email')
return email
def clean_username(self):
username = self.cleaned_data.get('username')
if User.objects.filter(email__iexact=username).exists():
raise forms.ValidationError('A user has already registered using this username')
return username
class Meta(UserCreationForm.Meta):
model = User
fields = ['first_name', 'last_name', 'email', 'username']
@transaction.atomic
def save(self):
user = super().save(commit=False)
user.is_student = True
user.first_name = self.cleaned_data.get('first_name')
user.last_name = self.cleaned_data.get('last_name')
user.email = self.cleaned_data.get('email')
user.username = self.cleaned_data.get('username')
user.save()
student = Student.objects.create(user=user)
student.phone_number=self.cleaned_data.get('phone_number')
student.semester=self.cleaned_data.get('semester')
student.session_year=self.cleaned_data.get('session_year')
student.save()
return user
视图.py
class StudentRegister(LoggedInRedirectMixin, CreateView):
model = User
form_class = StudentSignUpForm
template_name = 'registration/user_register.html'
def form_valid(self, form_class):
user = form_class.save()
return redirect('datapage')
@Vatsai Vohera - 如果我错了请纠正我。
session = Session.objects.get(session=self.cleaned_data.get('session_year')
student.session_year = session
您正在将请求的数据添加到不起作用的 session_year 字段中,而您必须将请求的数据保存到 model Session 字段 session 中。我希望这对您有用。
您可以在 ForeignKey 属性中使用related_name='...'
字段并添加以下内容:
session_year = models.ForeignKey(Session,related_name='some thing', on_delete = models.CASCADE, null = True)
那么你必须通过相关名称调用 session_year
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.