【发布时间】:2020-05-12 18:40:44
【问题描述】:
我有 2 个与 M2M 关系链接的模型,我想构建一个表单,允许管理链接但也可以添加对选定值的控件。 这发生在管理模板之外。
我设法定义了管理链接的表单,但我无法考虑其他信息来定义有效性控制。
这是我的模型:
class EventGroup(models.Model):
company = models.ForeignKey(
Company, on_delete=models.CASCADE, verbose_name="société"
)
users = models.ManyToManyField(UserComp, verbose_name="utilisateurs", blank=True)
group_name = models.CharField("nom", max_length=100)
weight = models.IntegerField("poids", default=0)
class Event(models.Model):
company = models.ForeignKey(
Company, on_delete=models.CASCADE, verbose_name="société"
)
groups = models.ManyToManyField(EventGroup, verbose_name="groupes", blank=True)
rules = [("MAJ", "Majorité"), ("PROP", "Proportionnelle")]
event_name = models.CharField("nom", max_length=200)
event_date = models.DateField("date de l'événement")
slug = models.SlugField()
current = models.BooleanField("en cours", default=False)
quorum = models.IntegerField(default=33)
rule = models.CharField(
"mode de scrutin", max_length=5, choices=rules, default="MAJ"
)
形式:
class EventDetail(forms.ModelForm):
groups = forms.ModelMultipleChoiceField(
label = "Liste des groupes",
queryset = EventGroup.objects.none(),
widget = forms.CheckboxSelectMultiple,
required = False
)
class Meta:
model = Event
fields = ['event_name', 'event_date', 'quorum', 'rule', 'groups']
观点:
def event_detail(request, evt_id=0):
if evt_id > 0:
current_event = Event.objects.get(id=evt_id)
event_form = EventDetail(request.POST or None, instance=current_event)
else:
event_form = EventDetail(request.POST or None)
company = Company.get_company(request.session['comp_slug'])
event_form.fields['groups'].queryset = EventGroup.objects.\
filter(company=company).\
order_by('group_name')
if request.method == 'POST':
if event_form.is_valid():
event_form.save()
return render(request, "polls/event_detail.html", locals())
这可以毫无问题地添加或删除专用于所选或新事件的组,但我需要添加组的权重信息并控制所选组的总权重正好为 100。除此之外,我将还需要确保所选组中的每个用户只列出一次。 有没有人知道如何实现这些控件,或者至少如何显示附加信息以向用户提供相关的必要信息?
【问题讨论】:
标签: python django django-forms many-to-many checkboxlist