Я пытаюсь редактировать поле отношения 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 %}