我有一个 Django 模型ManyToManyField
在里面。我需要要求用户在此字段中至少选择一个 M2M 值。
我尝试设置blank=False
到M2M领域,但没有帮助。
class Skill(models.Model):
name = models.CharField(max_length=200)
class PersonSkills(models.Model):
person = models.ForeignKey('Person')
skill = models.ForeignKey('Skill')
class Person(models.Model):
name = models.CharField(max_length=200)
skills = models.ManyToManyField('Skill', through='PersonSkills')
p = Person(name='Bob')
p.save()
# success, but I expect that this should throw ValidationError, because I didn't select at least one Skill for this person
我可以通过自定义解决这种情况Form
定义或覆盖save()
方法用于Person
model.
是否可以阻止创建Person
没有至少一个Skill
已选择,已设置ManyToManyField
选项?或者我需要创建自定义逻辑来处理这种情况?谢谢。
I use Django 1.7
and Python 3.4
更新1。如何创建ModelForm
控制M2M?因为在cleaned_data
我只有我传递的字段Person
表单,并且没有我作为 M2M 字段传递的数据。我尝试在管理站点中创建对象并控制它Skills
已选择。我输入Skill
's via inline
.
# admin.py
class PersonSkillsInline(admin.TabularInline):
model = Person.skills.through
extra = 2
class PersonAdmin(admin.ModelAdmin):
inlines = [PersonSkillsInline]
admin.site.register(Person, PersonAdmin)