Кнопка редактирования неправильной формы при редактировании множества полей - PullRequest
0 голосов
/ 24 февраля 2020

Я пытаюсь редактировать поле отношения ManyToMany, и я использую ModelForm в моем forms.py, и я использую Createview в моем views.py. В моем файле forms.py я использую ModelMultipleChoiceField для редактирования отношения ManyToMany из поля участника в модель Person. Проблема в том, что когда шаблон отображает форму, он помещает кнопку редактирования в последнее поле, а не в то, которое я хочу редактировать. например:

model=Activity
participant=ModelMultipleChoiceField(queryset=Activity.objects.all())
fields=['activity_name','project','participant','min_stage_area']

, это поместит кнопку редактирования прямо за формой 'min_stage_area', а не формой 'участника' там, где я хочу. Как мне решить эту проблему?

views.py:

class CreateTour(CreateView):

    form_class=CreateTourForm
    template_name='artdb/createtour.html'

    def get_context_data(self,**kwargs):

        context=super(CreateTour,self).get_context_data(**kwargs)

        return context

    def form_valid(self):

        response=super(CreateTour,self).form_valid()
        self.object.project=self.form.cleaned_data['project']

        return response

forms.py:

class CreateTourForm(ModelForm):

    class Meta:

        model=Activity
        participant=ModelMultipleChoiceField(queryset=Activity.objects.all())
        #person_instance.first_name.add(activity_instance)
        fields=['activity_name','project','participant','min_stage_area']

models.py:

class Activity(models.Model):

    activity_name=models.CharField(max_length=200,default='no name')    
    project=models.ForeignKey(Project,on_delete=models.CASCADE,default=1)
    participant=models.ManyToManyField(Person)
    min_stage_area=models.IntegerField(default='2')
    light_requirements=models.CharField(max_length=200,default='no requirements')
    sound_engineer=models.CharField(max_length=200,default='not needed')
    comment=models.ManyToManyField(Comment)

    def __str__(self):
        return self.activity_name

    class Meta:
        ordering = ('activity_name',)

class Person(models.Model):

    SALARYTYPE=(('None','N'),('Faktura','F'),('Lön','L'))

    first_name=models.CharField(max_length=200,default='firstname')
    last_name=models.CharField(max_length=200,default='lastname')
#    role=models.ManyToManyField(Role)
    mail=models.EmailField(default='yourname@gmail.com')
    homepage=models.CharField(max_length=200,default='www.yourhomepage.com')
    phone_number=PhoneNumberField(default='+46707305134')
    street_address=models.CharField(max_length=200,default='streetAdress')
    zipcode=models.CharField(max_length=200,default='99999')
    city=models.CharField(max_length=200,default='Göteborg')
    country=models.CharField(max_length=200,default='Sweden')
    payment=models.CharField(max_length=10,choices=SALARYTYPE,default='none')
    comment=models.ManyToManyField(Comment)

    def __str__(self):
        return "%s %s" % (self.first_name,self.last_name)

    class Meta:
        ordering = ('first_name','last_name')

шаблон:

{% extends "artdb/index.html" %}

{% block ct %}
<form method="post">{% csrf_token %}
<div class="input-group">
  {% for fr in formset %}
    {{fr}}
  {% endfor %}
            {{form}}
            <div class="input-group-append">
                <button class="btn btn-success add-form-row">+</button>
            </div>
        </div>
        <hr></hr>
        <div class="row spacer">
          <input type="submit" value="save">
          </div>
</form>
{% endblock ct %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...