如何通过ModelForm在Django中编辑m2m [英] How to edit m2m in Django via ModelForm
本文介绍了如何通过ModelForm在Django中编辑m2m的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有两个模型:
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
当我想创建套件或案例时,它工作正常: / p>
When I want to create suite or case it works fine:
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
})
但是当我想编辑这些,我使用下一个视图:
But when I want to edit these, I use next views:
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')
})
所以,我需要知道如何保存编辑套件。添加工作很好,在管理面板工作确定,但是当我尝试编辑套件,我收到很多不同的错误。管理中的关键时刻运作良好。
谢谢
So, I need to know how to save edited suite. Adding works fine, in admin panel works ok, but when I tried to edit suite, I receive a lot of different errors. The key moment - in admin works well. Thank you
推荐答案
好的,有我的坏要编辑m2m模型表单,您应该使用这样的东西
Ok, there was my bad. To edit m2m model forms you should use something like this
form = EditSuite(request.POST, instance = suite)
if form.is_valid():
obj = form.save(commit=False)
obj.user = request.user
cases = request.POST.getlist('cases')
obj.save()
form.save_m2m()
这篇关于如何通过ModelForm在Django中编辑m2m的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文