好的,所以我转到'employment_add'的视图,我在Django表单的字段中输入值,然后提交。
成功,它创建一个新的就业记录,页面以空表格重新加载。
当我输入值并第二次提交时,它会更新;即使我没有将一个实例传递给表单,它也是未绑定的。
我希望能够创建一份新的就业记录。
有什么建议吗?谢谢你的帮助。
--- --- UPDATE
继拉吉夫的回答之后:我不明白Django从哪里获得前一个对象的uuid。任何人都可以解释在RequestContext中存储这些信息的位置吗?表单或POST数据中没有uuid(pk)字段,我无法在RequestContext中的任何位置找到它。我也没有将一个实例传递给Form 情景......任何解释都会非常感激
--- --- UPDATE 在Employment_add视图中,问题似乎出现在就业的实例中。 请参阅代码
下面的pdb跟踪===MODELS===
###User Model is provided by Django
import uuid
def make_uuid():
return str(uuid.uuid4())
class __base__(models.Model):
uuid = models.CharField(max_length=36, primary_key=True,
default=make_uuid(), editable=False)
#max_length must be 36. uuid4 generates a 36 character key
class Meta:
abstract = True
class Employment(__base__):
user = models.ForeignKey( User, related_name='employment')
### employment related fields - no other PK or FK
===FORM===
class EmploymentForm(ModelForm):
class Meta:
model = Employment
exclude = ('user')
widgets = {
}
===VIEW===
def employment_add(request):
context_instance = RequestContext(request)
u = request.user
if request.method == 'POST':
message=""
form = EmploymentForm(request.POST)
if form.is_valid():
f = form.save(commit=False)
f.user = u
f.save()
message = "Position Added"
form = EmploymentForm()
return render_to_response("employment_add.html", {'form':form, 'message':message}, context_instance)
else:
em = Employment()
#start pdb trace here
form = EmploymentForm(instance=em)
return render_to_response("employment_add.html", {'form': form}, context_instance)
===pdb trace===
(Pdb) em
<Employment: Employment object>
(Pdb) em.uuid
u'260015bc-c2eb-4cc1-9506-75e312027404'
(Pdb) c
[29/Aug/2011 14:15:25] "GET /person/employment/add HTTP/1.1" 200 4425
[29/Aug/2011 14:15:33] "POST /person/employment/add HTTP/1.1" 302 0
<QueryDict: {u'month_start': [u''], u'year_start': [u''], u'year_end': [u''], u'employer': [u'66'], u'details': [u'6'], u'month_end': [u''], u'position': [u'66'], u'csrfmiddlewaretoken': [u'9e9c6b2ac43c370f993cb3f72682c7ea'], u'city_town': [u'']}>
[29/Aug/2011 14:15:33] "GET /person/view?i=1 HTTP/1.1" 200 9255
(Pdb) em
<Employment: Employment object>
(Pdb) em.uuid
u'260015bc-c2eb-4cc1-9506-75e312027404'
(Pdb)
答案 0 :(得分:3)
问题似乎是default=make_uuid()
。这仅在模型类创建时运行make_uuid
一次,并将一个生成的值(不是函数)作为字段的默认值传递。每次创建实例时,都会使用相同的默认值。
您应该将callable作为默认值传递,例如:default=make_uuid
。
答案 1 :(得分:0)
在代码的最后:
else:
form = EmploymentForm()
return render_to_response("employment_add.html", {'form': form}, context_instance)
从对render_to_response的调用中删除context_instance
。此上下文实例包含提交的表单数据,并在第二次预填充表单。