J'ai 2 modèles:Comment modifier m2m dans Django via ModelForm
class Case(models.Model):
Priority = (
('Blocker', 'Blocker'),
('High', 'High'),
('Medium', 'Medium'),
('Low', 'Low'),
)
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=200)
image = models.URLField(blank=True)
requirements = models.URLField(blank=True)
priority = models.CharField(max_length=10, choices=Priority)
description = models.CharField(max_length=200)
step = models.TextField()
modified = models.DateTimeField(editable=False)
user = models.ForeignKey(User, editable=False)
def save(self, *args, **kwargs):
''' On save, update timestamps '''
if not self.id:
self.modified = datetime.datetime.today()
super(Case, self).save(*args, **kwargs)
def __unicode__(self):
return self.name
return self.description
class Suite (models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=200)
features = models.TextField()
modified = models.DateTimeField(editable=False, null=True)
cases = models.ManyToManyField(Case, null=True)
user = models.ForeignKey(User, editable=False)
def save(self, *args, **kwargs):
''' On save, update timestamps '''
if not self.id:
self.modified = datetime.datetime.today()
super(Suite, self).save(*args, **kwargs)
def __unicode__(self):
return self.name
return self.description
Quand je veux créer suite ou cas, il fonctionne très bien:
def addCase(request):
c = {}
c.update(csrf(request))
user = auth.get_user(request)
if request.method == 'POST':
form = AddCase(data = request.POST)
if form.is_valid():
form.save()
else:
form = AddCase()
return render_to_response('1.html', {
'form': form,
'js': c.items(),
'host' : request.get_host(),
'user' : user
})
def addSuite(request):
c = {}
c.update(csrf(request))
user = auth.get_user(request)
if request.method == 'POST': # If the form has been submitted...
form = AddSuite(data = request.POST)
if form.is_valid():
form.save()
else:
form = AddSuite()
return render_to_response('2.html', {
'form': form,
'js': c.items(),
'host' : request.get_host(),
'user' : user
})
Mais quand je veux modifier ceux-ci, J'utilise les vues suivantes:
def editSuite (request, suite_id):
suite = Suite.objects.get(id=suite_id)
name = suite.name
features = suite.features
cases = suite.cases
c = {}
c.update(csrf(request))
if request.method == 'POST': # If the form has been submitted...
form = EditSuite(data = request.POST)
if form.is_valid():
suite = Suite(
id = suite_id,
name = form.cleaned_data['name'],
features = form.cleaned_data['features'],
cases = request.POST.getlist('cases')
)
suite.save()
# form.save()
else:
form = EditSuite(instance = suite)
return render_to_response('editsuite.html', {
'form': form,
'suite': suite,
'cases' : request.POST.getlist('cases')
})
Donc, j'ai besoin de savoir comment sauvegarder la suite éditée. Ajoutant des travaux bien, dans le panneau d'administration fonctionne bien, mais quand j'ai essayé de modifier la suite, je reçois beaucoup d'erreurs différentes. Le moment clé - dans l'administration fonctionne bien. Merci