我正在爲一個添加和編輯團隊和志願者的應用程序創建一組視圖。志願者可以按照自己的意願參加儘可能多的團隊,其中一些團隊成爲團隊領導者。由於需要流程的靈活性(我猜),我已經將兩個項目分開了(儘管我願意接受這方面的建議!),並且我試圖設置視圖的一致性。例如,我想確保每次我在一個視圖中添加一個組長時,他們也會被註冊爲一個組員。當我將()添加到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。 –