Django formulaires de demande.l'utilisateur
J'ai mon modèle, les utilisateurs peuvent créer des fusils et ce fusil est évidemment associé à un Utilisateur.
class Gun(ImageModel):
user = models.ForeignKey(User)
...
...
...
J'ai un autre modèle qui dépend de ce et de la nécessité de faire usage des utilisateurs des fusils, mais lorsque l'utilisateur ajoute un enregistrement je ne veux afficher ses fusils.
mt modèle se présente comme suit
class Trophies(ImageModel):
used_his = models.ForeignKey(Gun)
mon formulaire se présente comme suit
from django.forms import ModelForm
from django import forms
from models import Trophies
from gunsafe.models import Gun
from django.contrib.auth.models import User
class TrophiesForm(request.user, ModelForm):
used_his = forms.ModelMultipleChoiceField(queryset=Gun.objects.filter(user__id=1))
def __init__(self, user, *args, **kwargs):
super(TrophiesForm, self).__init__(*args, **kwargs)
self.fields['used_his'].queryset = User.objects.filter(pk = user)
Je me demandais comment je peux récupérer les utilisateurs enregistrés ID à la place de la user__id=1
Ici est le point de vue.
def edit(request, trophy_id, template_name='trophies/edit.html'):
trophy = Trophies.objects.get(pk=trophy_id)
if request.method == 'POST':
form = TrophiesForm(request.POST, request.FILES, instance=trophy)
if form.is_valid():
newform = form.save(commit=False)
newform.user = request.user
newform.save()
...
...
OriginalL'auteur ApPeL | 2010-08-20
Vous devez vous connecter pour publier un commentaire.
Je pense que vous pouvez y arriver par la substitution de la
__init__()
méthode de la forme, en passant une instance deUser
et de filtrage de l'queryset
à l'aide de cet utilisateur. Quelque chose comme ceci:Dans votre vue, vous pouvez passer à la appropriée (actuellement connecté) instance de
User
.vous pouvez passer l'instance d'utilisateur premier argument de la forme du constructeur et essayer de nouveau?
form = TrophiesForm(request.user, ...)
.basée le change quand je demande d'ajout.l'utilisateur que le premier argument que je viens d'obtenir le nom de "demande" n'est pas défini"
Étrange! Pouvez-vous poster le code modifié?
Collé de la version mise à jour pour vous. Merci pour votre aide btw!
OriginalL'auteur Manoj Govindan
Un autre angle à Manoj de soumission ...
utiliser un kwarg pour transmettre les données de l'utilisateur, afin de ne pas salir avec la signature de la méthode, car il s'attend à la demande.POSTE en tant que premier argument. Une meilleure convention serait comme suit.
Maintenant dans l'appel, ce qui est plus explicite et s'en suit une meilleure signature de la convention de
Vous pouvez également utiliser exemple: (à noter le super avant de saisir l'instance obj)
Vous pouvez ensuite appeler à votre views.py comme:
OriginalL'auteur ButtersB