我正在尝试制作一个视图,在那里用户可以通过模板中的表单编辑数据库记录。我搜索了很多网页(还有Django文档),在那里他们教会了如何制作这些视图,但他们总是使用Django为每个Model生成的"id“。在这个特定的模型中,我必须使用AutoField来覆盖"id“。有没有办法在Django中使用这个AutoField作为记录的"id“?
这是我的完整模型:
class T031003 (models.Model):
C003IDCD = AutoField(primary_key=True)
C003INST = models.IntegerField(unique=True) #usar AutoSlug
C003TPCD = models.CharField(max_length=1)
C003CHCD = models.CharField(max_length=14)
C003MTR = models.CharField(max_length=30, blank=True, null=True)
C003CTCD = models.CharField(max_length=3)
C003RZSC = models.CharField(max_length=60, blank=True, null=True)
C003EML = models.EmailField(max_length = 254, blank=True, null=True)
C003LOGA = models.CharField(max_length=20)
C003LOGB = models.DateTimeField()
C003LOGD = models.CharField(max_length=15, blank=True, null=True)
C003LOGF = models.CharField(max_length=20, blank=True, null=True)
def __unicode__(self):
return '%s' % self.C003MTR
class T031003Form(ModelForm):
class Meta:
model = T031003
ordering = ["-C003MTR"]
exclude = ('C003LOGA','C003LOGB','C003LOGD','C003LOGE','C003LOGF')下面是我尝试执行的视图,但它显示错误"No T031003 matches the给定query“。这是对的,因为表中没有"id“:
def t031003form_edit(request, id=None):
pin = get_object_or_404(T031003, pk=id)
form = T031003Form(request.POST or None, instance=pin)
if request.method == 'POST':
if form.is_valid():
form = form.save(False)
form.C003LOGA = request.user
form.C003LOGB = datetime.date.today()
form.C003LOGD = request.META['REMOTE_ADDR']
form.C003LOGF = request.META['USERDOMAIN']
form.save()
form = T031003Form()
else:
return HttpResponseRedirect('/erro/')
return render_to_response('T031003Form_edit.html', {'form': form,}, context_instance=RequestContext(request))任何帮助都将不胜感激!
发布于 2012-06-17 15:37:30
多亏了一位好朋友的帮助,我可以使用表单集完成这项工作。以下是视图:
def t031002form_edit(request, id_auto):
j = get_object_or_404(T031002, pk=id_auto)
T031003FormSet = modelformset_factory(T031002, can_delete=True, max_num=1)
if request.method == 'POST':
form = T031002FormSet(request.POST or None, request.FILES or None, queryset=T031002.objects.filter(pk=id_auto))
if form.is_valid():
instance = form.save(commit=False)
form.C003LOGA = request.user
form.C003LOGB = datetime.date.today()
form.C003LOGD = request.META['REMOTE_ADDR']
form.C003LOGF = request.META['USERDOMAIN']
for reform in instance:
reform.save()
else:
return HttpResponseRedirect('/erro/')
else:
form = T031002FormSet(queryset=T031002.objects.filter(pk=id_auto))
return render_to_response(('T031002Form_edit.html'), {'form': form,}, context_instance=RequestContext(request))因此,有了表单集,您就可以很好地工作,而不用担心。希望它能帮助其他人解决同样的问题。
发布于 2012-06-13 00:51:37
如果一个模型有一个AutoField --一个自动递增的主键--那么这个自动递增的值将被计算出来,并在你第一次调用AutoField()时作为一个属性保存在你的对象上:
>>> b2 = Blog(name='Cheddar Talk', tagline='Thoughts on cheese.')
>>> b2.id # Returns None, because b doesn't have an ID yet.
>>> b2.save()
>>> b2.id # Returns the ID of your new object.在调用save()之前,无法判断ID的值是多少,因为该值是由数据库计算的,而不是由Django计算的。
参考:https://docs.djangoproject.com/en/dev/ref/models/instances/?from=olddocs
https://stackoverflow.com/questions/11000955
复制相似问题