J'essaie de créer une vue dans laquelle l'utilisateur peut modifier les enregistrements de base de données via un formulaire dans un modèle. J'ai cherché beaucoup de pages Web (et aussi de docs Django) où elles enseignent comment faire ces vues, mais elles utilisent toujours le "id" que Django génère pour chaque modèle. Dans ce modèle particulier, je dois utiliser un AutoField pour remplacer le "id". Est-il possible d'utiliser ce AutoField comme un "id" de l'enregistrement avec Django?Django: Modifier ModelForm à l'aide de AutoField
Voici mon modèle complet:
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')
Et voici la vue que j'ai essayé de le faire, mais il me donne l'erreur « Aucun T031003 correspond à la requête donnée. » et c'est vrai, puisqu'il n'y a pas "id" dans le tableau:
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))
Toute aide serait très appréciée!
Juste un petit plus: ce "id_auto" est une valeur que vous allez passer à travers l'URL. Dans votre urls.py vous aurez 'url (r '^ t031002form_edit/(? P \ d +) /', 'Mod031.views.t031002form_edit')' et dans le template, vous passerez quelque chose comme:/t031002form_edit/1/Cela vous mènera à l'enregistrement dans la base de données où "id" est égal à 1 (et l'id dans ce cas est l'AutoField). –