[英]Django how to filter ManyToMany Field
I am trying to build a form with filtered many-to-many field.我正在尝试构建一个带有过滤的多对多字段的表单。 so i created Objects:
所以我创建了对象:
Dayname日名
1) name=sunday 1) 姓名=星期天
2) name=monday 2) 姓名=星期一
Submain子主
1) name:Math 1) 名称:数学
days(ManytoMany field): Sunday Monday天数(多对多字段):星期日星期一
2) name: Sport 2) 名称:运动
days(ManytoMany field): Tuesday天数(多对多字段):星期二
3) name:Dance 3) 名称:舞蹈
days(ManytoMany field): Sunday Tuesday天数(多对多字段):周日周二
Day天
1)name(Char field)="Sunday" 1)名称(字符字段)=“星期天”
hog1(ManytoMany field, filterd): will show me only Dance and Math to pick. hog1(ManytoMany 字段,已过滤):将只显示可供选择的舞蹈和数学。
how can i filted this hog1 manytomany field in the form.py?我如何在 form.py 中填充这个 hog1 manytomany 字段? should i change the Name of Day model into forginkey of dayname?
我应该将日期名称 model 更改为日期名称的 forginkey 吗? thank you for any help.
感谢您的任何帮助。
I Have 3 Models:我有 3 个模型:
Models.py模型.py
class Dayname(models.Model):
name = models.CharField(verbose_name="day", max_length=200, null=True)
def __str__(self):
return self.name
class Submain(models.Model):
name = models.CharField(verbose_name="שם החוג", max_length=200, null=True)
days = models.ManyToManyField(Dayname, verbose_name="ימי פעילות",
related_name="active", max_length=200, null=True,
)
def __str__(self):
return self.name
class Day(models.Model):
name = models.CharField(verbose_name="יום", max_length=200, null=True)
hog2 = models.ManyToManyField(Submain, verbose_name="חוג 2 ביום",
related_name="hog2", max_length=200, null=True,
)
def __str__(self):
return self.name
forms.py forms.py
class DaysForm(ModelForm):
def __init__(self, *args, **kwargs):
super(DaysForm, self).__init__(*args, **kwargs)
self.fields['hog1'].required = False
self.fields["hog1"].widget = CheckboxSelectMultiple()
self.field['hog1'].queryset = Submain.objects.filter(days__in__name="sunday")
self.fields['hog1'].queryset = Submain.objects.filter(days__in=['id of dayname'])
And you may probably want to add.distinct().您可能想要添加.distinct()。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.