【发布时间】:2014-06-20 01:12:17
【问题描述】:
根据要求,我包含了我所有的模型和表单字段。
型号:
from django.db import models
from django.contrib.auth.models import User
from taggit.managers import TaggableManager
class StudentProfile(models.Model):
student = models.OneToOneField(User)
name = models.CharField(max_length=30)
website = models.URLField(max_length=50)
def __unicode__(self):
return self.user.username
class Skills(models.Model):
student = models.ForeignKey(StudentProfile)
title = models.CharField(max_length=50)
tags = TaggableManager()
def __unicode__(self):
return self.student
class Experience(models.Model):
student = models.ForeignKey(StudentProfile)
company = models.CharField(max_length=25)
profile = models.CharField(max_length=25)
def __unicode__(self):
return self.student
模型表单
from django import forms
from django.forms import ModelForm
from django.contrib.auth.models import User
from models import StudentProfile
class StudentProfileForm(forms.ModelForm):
class Meta:
model = StudentProfile
exclude = ['student']
def __init__(self, user, *args, **kwargs):
self._user = user
super(StudentProfileForm, self).__init__(*args, **kwargs)
class UserForm(forms.ModelForm):
class Meta:
model = User
fields = ('username', 'password')
def clean_username(self):
username = self.cleaned_data['username']
try:
User.objects.get(username = username)
raise forms.ValidationError("That username is already taken"+username)
except User.DoesNotExist:
return username
def clean_password(self):
password = self.cleaned_data.get('password', '')
if password == '':
raise forms.ValidationError("Password be atleast 2 characters ")
return password
views.py:
from forms import StudentProfileForm
from django.contrib.auth.models import User
def editbio(request):
if request.method == 'POST':
student = User(username = request.user)
basic_form = StudentProfileForm(data=request.POST, user=student)
if basic_form.is_valid():
info = basic_form.save(commit=False)
info.student = request.user
info.save()
我正在尝试从模型表单中排除“用户”,以便将当前用户添加到其中。但我不断收到表单错误:
<ul class="errorlist"><li>student<ul class="errorlist"><li>This field is required.</li></ul></li></ul>
我正在通过以下方式获取发布数据(来自表单):
$(function editinfo(){
$(".inline-form").submit(function() {
$.ajax({
url : "/editbio",
type : "POST",
dataType: "json",
data :
$(this).serialize(),
success : function(json) {
$('.result').html( 'Server Response: ' + json.server_response);
},
error: function(data) {
$(".result").html("Something went wrong!");
}
});
return false;
});
});
我搜索了很多结果,但没有成功。虽然我在表单中使用了“排除”,但在print basic_form.fields 中仍然显示“学生”字段
request.POST的内容:http://pastebin.com/eLQfTFB1
让我知道我在这里做错了什么,任何帮助将不胜感激。谢谢。
【问题讨论】:
-
你能发布
print basic_form.fields的结果吗?另外,这些是您完整的模型和表单类吗?如果是这种情况,我看不出它是如何工作的,否则请发布完整的代码。 -
我已经编辑了我的答案,请看一下。
print basic_form.fields显示 pastebin.com/25tPVu6F。 -
你使用的是哪个 Django 版本?我似乎无法复制这个问题,你能提供一个minimal, complete and verifiable example吗?
-
哦,你能发布所有相关的导入语句吗?