我正在为一个添加和编辑团队和志愿者的应用程序创建一组视图。志愿者可以按照自己的意愿参加尽可能多的团队,其中一些团队成为团队领导者。由于需要流程的灵活性(我猜),我已经将两个项目分开了(尽管我愿意接受这方面的建议!),并且我试图设置视图的一致性。例如,我想确保每次我在一个视图中添加一个组长时,他们也会被注册为一个组员。当我将()添加到ManyToMany关系时,它是否取代以前的记录?
class Team(models.Model):
team_name = models.CharField(max_length=30, null=True, blank=True)
leaders = models.ManyToManyField(Volunteer, related_name='leaders', blank=True)
enrolled = models.ManyToManyField(Volunteer, related_name='enrolled', blank=True)
class Volunteer(models.Model):
name = models.CharField(max_length=30)
我有一个观点,我正在做这个。保存表格后,我将每个leaders
并将它们添加到enrolled
字段。但是,当我添加它们时,我发现在该字段上注册的以前的值已被我添加的新值所取代。我可以将以前的值保存在一个变量中并重新应用,但是它应该以这种方式工作吗?
class TeamUpdate(LoginRequiredMixin, UpdateView):
form_class = TeamCreateForm
model = Team
def form_valid(self, form):
self.object = form.save()
for i in self.object.leaders.all():
self.object.enrolled.add(i)
return HttpResponseRedirect(reverse('single', args=(self.object.id,)))
你能指点我的方向吗?
编辑:添加表单和模板。前者显示模型中的所有实际字段(为了简化它,我减少了它们,但如果您愿意,我可以将它们全部发布)。
class TeamCreateForm(forms.ModelForm):
class Meta:
model = Team
template_name = 'team_form.html'
fields = '__all__'
模板:
{% extends "base.html" %}
{% block title %}Add or edit team{% endblock %}
{% block content %}
<div class="container">
<div class="container">
<h1 class="blue-text">add or edit team</h1>
<form class="registration" action="" method="post">{% csrf_token %}
{% csrf_token %}
<div class="white row z-depth-1">
<small class="red-text">{{ form.non_field_errors }}</small>
<div class="col s9">
<label for="id_name">Team Name</label>{{ form.team_name }}
<small class="error brick-text">{{ form.team_name.errors }}</small>
</div>
<div class="col s12">
<label for="id_name">Team Leaders</label>{{ form.leaders }}
<small class="error brick-text">{{ form.leaders.errors }}</small>
</div>
<a class="waves-effect waves-light btn-large blue" onClick="$(this).closest('form').submit();">Save</a>
</div>
</form>
</div>
</div>
{% endblock %}
添加不应取代现有的关系。你如何检查登记的价值? – arjun27
你可以显示'TeamCreateForm'吗? – knbk
@knbk已添加。你可以看到它是一个非常标准的ModelForm。 –