Je suis en train de créer la forme, pour ajouter de nouveaux amis/la mise à jour existante. Ma première solution utilise ModelForm, mais les données du formulaire mis à jour ne sont pas enregistrées. Le problème est aussi que mon modèle a CharFields ('code', 'pid'), que j'ai besoin de valider avec regex à travers mon formulaire. Si j'exclue ces champs dans Meta, et les ajoute à l'FriendForm, lorsque le formulaire est chargé, je n'y reçois aucune donnée.Les formulaires pour les cas non enregistrés
def add_friend(request):
userprofile = UserProfile.objects.get(user=request.user)
if request.method == 'POST':
form = FriendForm(request.POST, request.FILES,)
if form.is_valid():
form.save()
next = reverse('user_profile',)
return HttpResponseRedirect(next)
else:
form = FriendForm()
return render_to_response('user/data_operations/add_friend.html', {
'form':form, 'user':request.user,
}, context_instance=RequestContext(request))
def edit_friend(request, id):
userprofile = UserProfile.objects.get(user=request.user)
friend = get_object_or_404(Friend, id=id)
if friend.friend_of.id!=userprofile.id:
raise Http404
if request.method == 'POST':
form = FriendForm(request.POST, request.FILES, instance=friend)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('user_profile',))
else:
form = FriendForm(instance=friend)
return render_to_response('user/data_operations/edit_friend.html', {
'form': form, 'user': request.user, 'friend': friend,
}, context_instance=RequestContext(request))
class FriendForm(forms.ModelForm):
class Meta:
model = Friend
exclude = ('friend_of',)
La seconde solution utilise des formulaires. Formulaire. Ici, le problème est que Je ne peux pas envoyer d'instance à mon formulaire, donc je ne peux pas obtenir des données pour éditer. Pour cette raison, je ne suis pas en mesure de vérifier si ma méthode de sauvegarde fonctionne et si cette solution est meilleure.
def add_friend(request):
userprofile = UserProfile.objects.get(user=request.user)
count = 0
if request.method == 'POST':
form = FriendForm(request.POST, request.FILES,)
if form.is_valid():
form.save(user=userprofile)
next = reverse('user_profile',)
return HttpResponseRedirect(next)
else:
form = FriendForm()
return render_to_response('user/data_operations/add_friend.html', {
'form':form, 'user':request.user,
}, context_instance=RequestContext(request))
def edit_friend(request, id):
userprofile = UserProfile.objects.get(user=request.user)
friend = get_object_or_404(Friend, id=id)
if friend.friend_of.id!=userprofile.id:
raise Http404
if request.method == 'POST':
form = FriendForm(request.POST, request.FILES, instance=friend)
if form.is_valid():
form.save(user=userprofile)
return HttpResponseRedirect(reverse('user_profile',))
else:
form = FriendForm()
return render_to_response('user/data_operations/edit_friend.html', {
'form': form, 'user': request.user, 'friend': friend,
}, context_instance=RequestContext(request))
class FriendForm(forms.Form):
first_name = forms.CharField(widget=forms.TextInput(attrs=dict(attrs_dict, maxlength=50)), label="First name")
last_name = forms.CharField(widget=forms.TextInput(attrs=dict(attrs_dict, maxlength=50)), label="Last name")
pid = forms.RegexField(regex=r'^\d{11}', max_length=11 ,widget=forms.TextInput(attrs=dict(attrs_dict, maxlength=50)))
image = forms.ImageField(label="Image", required=False)
street = forms.CharField(widget=forms.TextInput(attrs=dict(attrs_dict, maxlength=50)), label="Street")
number = forms.CharField(widget=forms.TextInput, label="House/flat number")
code = forms.RegexField(regex=r'^\d{2}[-]\d{3}', max_length=6, widget=forms.TextInput(attrs=attrs_dict), label="Postal code")
city = forms.CharField(widget=forms.TextInput, label="City")
def save(self, user):
if self.is_valid():
from accounts.models import Friend
new_friend = Friend(**self.cleaned_data)
new_friend.friend_of = user
new_friend.save()
return new_friend
Voici mes modèles utilisés:
class UserProfile(models.Model):
(...)
user = models.ForeignKey(User, unique=True, related_name='profile')
class Friend(models.Model):
(...)
friend_of = models.ForeignKey(UserProfile, related_name='friend_of')
Comment puis-je obtenir ce travail? Mon formulaire pour l'édition d'utilisateur (en utilisant la méthode du modèle) fonctionne sans aucun problème:/