Python Django Admin未将数据保存到数据库
我试图将数据从Django管理员保存到数据库中,但不知何故,它没有发生。我已经在我的一个应用程序中创建了一个表单,供我的管理员使用。我是Django的新手,非常感谢您的帮助。 以下是相关代码: models.py forms.py 管理员 UserProfile工作正常,但是admin中的Mentor表单没有在数据库中保存任何内容。它会在数据库中创建空白条目,因此我知道前端和后端正在交谈,但没有传递任何数据。任何帮助都会很有帮助Python Django Admin未将数据保存到数据库,python,django,django-admin,django-database,Python,Django,Django Admin,Django Database,我试图将数据从Django管理员保存到数据库中,但不知何故,它没有发生。我已经在我的一个应用程序中创建了一个表单,供我的管理员使用。我是Django的新手,非常感谢您的帮助。 以下是相关代码: models.py forms.py 管理员 UserProfile工作正常,但是admin中的Mentor表单没有在数据库中保存任何内容。它会在数据库中创建空白条目,因此我知道前端和后端正在交谈,但没有传递任何数据。任何帮助都会很有帮助 def save(self, commit=True):
def save(self, commit=True):
# here you define `mentor_name`. OK.
mentor_name = self.cleaned_data.get('mentor_name', None)
# here you redefine `mentor_name`. I guess it is a typo and should be `mentee_name`.
mentor_name = self.cleaned_data.get('mentee_name', None)
# And... you don't do anything with these variables.
return super(MentorForm, self).save(commit=commit)
此方法相当于:
def save(self, commit=True):
return super(MentorForm, self).save(commit=commit)
这相当于根本不重写save方法
那么这个呢
def save_model(self, request, obj, form, change):
super(MentorAdmin, self).save_model(request, obj, form, change)
重写方法并仅使用完全相同的参数调用父方法的目的是什么
但实际问题是:
mentor_choices = tuple(UserProfile.objects.filter(user__is_staff=1).order_by('name').values_list('name', 'name'))
mentee_choices = tuple(UserProfile.objects.exclude(user__is_staff=1).order_by('name').values_list('name', 'name'))
mentor_name = forms.ChoiceField(choices=mentor_choices)
mentee_name = forms.ChoiceField(choices=mentee_choices)
class Meta:
model = Mentor
fields = ('mentor_name', 'mentee_name')
您使用的是ModelForm
,但Mentor
的字段中没有一个位于字段中。除了使用Mentor.Mentor=None
和Mentor.mentee=None
保存一行之外,您希望它做什么。你甚至没有提到那些领域
你为什么要用CharField
来表示Mentor.Mentor
和Mentor.mentee
,而你可能需要外键
class Mentor(models.Model):
mentor = models.ForeignKey(UserProfile, models.PROTECT,
related_name='mentees')
mentee = models.ForeignKey(UserProfile, models.PROTECT,
related_name='mentors')
class MentorForm(forms.ModelForm):
class Meta:
model = Mentor
fields = ('mentor', 'mentee')
mentor = forms.ModelChoiceField(queryset=UserProfile.objects.filter(
user__is_staff=True).order_by('name'))
mentee = forms.ModelChoiceField(queryset=UserProfile.objects.exclude(
user__is_staff=True).order_by('name'))
或者更好:
class Mentor(models.Model):
mentor = models.ForeignKey(
UserProfile, models.PROTECT, related_name='mentees',
limit_choices_to={'user__is_staff': True},
)
mentee = models.ForeignKey(
UserProfile, models.PROTECT, related_name='mentors',
limit_choices_to={'user__is_staff': False},
)
这样可以避免您创建表单。您确定是否调用了MentorAdmin.save\u model()
?尝试在方法顶部添加日志消息。@JohnGordon是的,正在调用该方法。我在调试模式下运行它,检查是否调用了该方法以及是否正在调用该方法。它按预期显示了所有参数,除了“change”会得到一个错误的结果,非常感谢。这是我的第一个Django项目,因此出现了愚蠢的错误。谢谢你帮助我
mentor_choices = tuple(UserProfile.objects.filter(user__is_staff=1).order_by('name').values_list('name', 'name'))
mentee_choices = tuple(UserProfile.objects.exclude(user__is_staff=1).order_by('name').values_list('name', 'name'))
mentor_name = forms.ChoiceField(choices=mentor_choices)
mentee_name = forms.ChoiceField(choices=mentee_choices)
class Meta:
model = Mentor
fields = ('mentor_name', 'mentee_name')
class Mentor(models.Model):
mentor = models.ForeignKey(UserProfile, models.PROTECT,
related_name='mentees')
mentee = models.ForeignKey(UserProfile, models.PROTECT,
related_name='mentors')
class MentorForm(forms.ModelForm):
class Meta:
model = Mentor
fields = ('mentor', 'mentee')
mentor = forms.ModelChoiceField(queryset=UserProfile.objects.filter(
user__is_staff=True).order_by('name'))
mentee = forms.ModelChoiceField(queryset=UserProfile.objects.exclude(
user__is_staff=True).order_by('name'))
class Mentor(models.Model):
mentor = models.ForeignKey(
UserProfile, models.PROTECT, related_name='mentees',
limit_choices_to={'user__is_staff': True},
)
mentee = models.ForeignKey(
UserProfile, models.PROTECT, related_name='mentors',
limit_choices_to={'user__is_staff': False},
)