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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top