Formulaire Django Override
Question
Autre question sur certains formulaires
Voici mon modèle
class TankJournal(models.Model):
user = models.ForeignKey(User)
tank = models.ForeignKey(TankProfile)
ts = models.IntegerField(max_length=15)
title = models.CharField(max_length=50)
body = models.TextField()
Voici mon modelform
class JournalForm(ModelForm):
tank = forms.IntegerField(widget=forms.HiddenInput())
class Meta:
model = TankJournal
exclude = ('user','ts')
Voici ma méthode pour le sauvegarder
def addJournal(request, id=0):
if not request.user.is_authenticated():
return HttpResponseRedirect('/')
#
# checking if they own the tank
#
from django.contrib.auth.models import User
user = User.objects.get(pk=request.session['id'])
if request.method == 'POST':
form = JournalForm(request.POST)
if form.is_valid():
obj = form.save(commit=False)
#
# setting the user and ts
#
from time import time
obj.ts = int(time())
obj.user = user
obj.tank = TankProfile.objects.get(pk=form.cleaned_data['tank'])
#
# saving the test
#
obj.save()
else:
print form.errors
else:
form = JournalForm(initial={'tank': id})
Quand il enregistre .. il se plaint que le réservoir n'est pas un TankProfile mais un Integer .. comment puis-je remplacer l'objet de formulaire pour faire du réservoir un TankProfile
merci
La solution
Je pense que vous voulez ceci:
class JournalForm(ModelForm):
tank = forms.ModelChoiceField(label="",
queryset=TankProfile.objects.all(),
widget=forms.HiddenInput)
Autres conseils
Pourquoi remplacez-vous la définition de réservoir?
class JournalForm(ModelForm):
tank = forms.IntegerField(widget=forms.HiddenInput())
Si vous omettez ce remplacement, Django gère la référence de clé étrangère pour vous.
"Comment puis-je remplacer l'objet de formulaire pour transformer Tank en profil de réservoir?"
Je ne comprends pas cette question, car il semblerait que vous ayez spécifiquement modifié le formulaire pour empêcher la clé étrangère de fonctionner.