Обновление Django ModelForm не работает - PullRequest
0 голосов
/ 01 июля 2018

Привет, у меня проблема с ModelForms. Когда я пытаюсь обновить объект из двух классов, используя транзакцию, ничего не происходит.

Моя форма класса:

class TeamForm(forms.ModelForm):
    employers = forms.ModelMultipleChoiceField(queryset=Employer.objects.all(), widget=forms.CheckboxSelectMultiple)

    class Meta:
        model = Team
        fields = '__all__'

Мои классы моделей:

class Team(models.Model):
    name = models.CharField(default='Team', max_length=100, unique=True)

    def __str__(self):
        return self.name


class Employer(models.Model):
    user = models.OneToOneField(User, on_delete=models.SET_NULL, null=True)
    team = models.ForeignKey(Team, on_delete=models.SET_NULL, null=True)
    team_leader = models.BooleanField(default=False)
    project_menager = models.BooleanField(default=False)
    # project_id = models.ForeignKey(Project, on_delete=models.SET_NULL, null=True)

    hourly_rate = models.IntegerField(default=0)
    working_time = models.FloatField(default=0.0)

    def __str__(self):
        return self.user.first_name + ' ' + self.user.last_name

и наконец мой взгляд:

def TeamUpdateView(request, pk):
    if request.method == 'POST':
        team_form = TeamForm(request.POST)
        if team_form.is_valid():
            with transaction.atomic():
                team = Team.objects.filter(pk=pk).update(name=str(team_form['name'].value()))
                for e in team_form['employers'].value():
                    Employer.objects.filter(pk=e).update(team=team)
            print(team_form.errors)
            return redirect('resources:ResourcesListView')
    else:
        team = get_object_or_404(Team, pk=pk)
        team_form = TeamForm(initial={'name': team.name})  # milestone_form = MilestoneForm()
        context = {'team_form': team_form, 'form_pk': pk}  # , 'milestone
        return render(request, 'resources/resources_edit_modal.html', context)

Когда я печатаю ошибку формы, я вижу что-то вроде этого:

<ul class="errorlist"><li>name<ul class="errorlist"><li>Team with this Name already exists.</li></ul></li></ul>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...