【发布时间】:2021-04-14 14:10:26
【问题描述】:
我希望仅当用户选择并提交 type="performance" 时才需要两个字段(曲目和表演者)。这是我的模型:
class Event(models.Model):
EV_TYPE = (
('performance', 'performance'),
('other', 'other'),
)
title = models.CharField(max_length=200)
type = models.CharField(max_length=15, choices=EV_TYPE, default="performance")
repertoire = models.ManyToManyField(Work, blank=True)
performer = models.ManyToManyField(Profile, limit_choices_to={'role__type__contains': 'Performer'})
我的表格:
class EventForm(forms.ModelForm):
class Meta:
model = Event
fields = [
'type',
'submitted_by',
'title',
'repertoire',
]
我的看法:
def event_create_view(request):
if request.method == 'POST':
form_event = EventForm(
request.POST,
repertoire_required=(not (active_user.id == 17)), # if the user is NMS then the repertoire field is not compulsory
initial={'submitted_by' : active_user.profile.id}
)
form_venue = AddVenueForm()
form_profile = ProfileForm()
form_work = WorkFromEventForm()
if form_event.is_valid():
this_event = form_event.save()
return redirect('event-edit', id=this_event.id)
这是我尝试过的。在上面的“form_event.is_valid”中,我做到了:
if form_event.is_valid():
this_event = form_event.save(commit=False)
if this_event['type'] == 'performance' and this_event['performer'] and this_event['repertoire']:
this_event.save()
return redirect('event-edit', id=this_event.id)
但这不起作用(我在提交时仍然收到“此字段是必需的”)。我怎样才能实现我想做的事情?
附录
这也不行:
if
this_event['type'] == 'performance' and not this_event['performer'] or not this_event['repertoire']:
messages.error(request, form_event.errors)
else:
this_event.save()
【问题讨论】:
标签: django django-views django-forms