Je sens que mon problème est tout à fait évident et a une solution triviale, mais je ne peux pas le trouver pour quelques heures ...Django modelmultiplechoicefield non liés tous les objets qui ne sont pas à queryset
par exemple réaliste Imaginons que j'ai modèles suivants:
class Report(models.Model):
title = models.CharField(max_length=60)
author = models.ForeignKey(User)
posts = models.ManyToManyField(Post)
class Post(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(User)
Il existe donc des rapports et des publications. Les messages peuvent être associés à un rapport. Et il y a le formulaire suivant pour limiter/non lié des messages aux rapports.
class AddPostsToReport(ModelForm):
def __init__(self, user, *args, **kwargs):
super(AddPostsToReport, self).__init__(*args, **kwargs)
self.fields['posts'] = forms.ModelMultipleChoiceField(
queryset=Post.objects.filter(author=user),
required=False,
widget=forms.CheckboxSelectMultiple)
class Meta:
model = Report
fields = ('posts',)
donc je passe paramètre supplémentaire (utilisateur) pour former et lorsque l'utilisateur ouvre avec cette forme, il ne peut lié/non lié ses propres messages.
Tout fonctionne bien, sauf une chose: lorsque l'utilisateur enregistre le formulaire - tous les messages des autres utilisateurs qui étaient liés à ce rapport ne sont plus liés. Ce n'est pas ce dont j'ai besoin. J'ai besoin que cet utilisateur puisse lier/délier uniquement ses propres messages au rapport, mais les messages des autres utilisateurs ne réinitialisent pas leur état.
Merci pour toute aide.
EDIT: voici la vue (ce n'est pas le point de vue réel, mais la logique de vue réelle est exactement le même)
@login_required
def report_add_posts(request, report_id):
report = get_object_or_404(Report, pk = report_id)
if request.method == 'POST':
form = AddPostsToReport(request.user, request.POST, instance = report)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse(...))
else:
form = AddPostsToReport(request.user, instance = report)
return render_to_response('report/page_with_form_to_add_posts.html',
{ 'form': form,
'report': report },
context_instance=RequestContext(request))
Pouvez-vous poster votre code d'affichage pour l'exemple complet? – Udi
ouais, j'ai ajouté le code de vue – kasitan