简体   繁体   English

Django如何过滤ManyToMany字段

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM