python - Django ModelForm Field Filtering with multiple model dependancies -


i have member model , group model foreign key member

class member(models.model):     member_name = models.charfield(max_length=100)     member_dob = models.datefield()  class group(models.model):     group_name = models.charfield(max_length=100)     group_owner = models.foreignkey(member, related_name='owner')     group_members = models.manytomanyfield(member, related_name='members') 

and have created model, activity refer both group , member

class activity(models.model):     group_id = models.foreignkey(group)     topic = models.charfield(max_length=100)     start_by = models.foreignkey(member, related_name='started')     participants = models.manytomanyfield(member, related_name='participants') 

now have created modelform acivity

class activityform(modelform):     class meta:         model = activity 

if have used object of activityform in template, users loaded in participants 'select' input. wish display members belonging group(with id= self.group_id) displayed in select option.

can please me in writing queryset include in init function of activityform that?

shouldn't member have foreign key group? want have many members in group not many groups single member right?

class member(models.model):     name = models.charfield(max_length=100)     dob = models.datefield()     group = modes.foreignkey('group', related_name='members')  class group(models.model):     name = models.charfield(max_length=100)     owner = models.foreignkey('member', related_name='owned_groups')  class activity(models.model):     group = models.foreignkey('group', related_name='activities')     topic = models.charfield(max_length=100)     start_by = models.foreignkey('member', related_name='started_activities')     participants = models.manytomanyfield('member', related_name='participating_activities') 

and can do:

class activityform(modelform):     def __init__(self, *args, **kwargs):         super(activityform, self).__init__(*args, **kwargs)         if 'initial' in kwargs:             self.fields['participants'].queryset = member.objects.filter(group=initial.group)     class meta:         model = activity 

edit


with change using manytomanyfield recommend fixing field names , related names too. easier make changes in development process rather when run different problem can't fixed. if makes easier understand think of way: related name accessible on model foreignkey or manytomanyfield points , contain queryset 0 or more entries.

so if have...

class member(models.model):     name = models.charfield(max_length=100)     dob = models.datefield()  class group(models.model):     name = models.charfield(max_length=100)     owner = models.foreignkey('member', related_name='owned_groups')     members = models.manytomanyfield('member', related_name='groups')  class activity(models.model):     group = models.foreignkey(group)     topic = models.charfield(max_length=100)     start_by = models.foreignkey('member', related_name='started_activities')     participants = models.manytomanyfield('member', related_name='activities') 

then can things like...

g1 = group.objects.create(name='group 1', ...) g2 = group.objects.create(name='group 2', ...)  member = member.objects.get(name='john') member.groups.all() # groups member member.groups.add(g1, g2) # add member 2 groups member.activities.all() # activities member participant in member.started_activities.all() # activities started user 

and form...

class activityform(modelform):     ...     def __init__(self, *args, **kwargs):         super(activityform, self).__init__(*args, **kwargs)         if 'initial' in kwargs:             self.fields['participants'].queryset = initial.group.members.all()      class meta:          model = activity 

i think work, if not:

class activityform(modelform):     ...     def __init__(self, *args, **kwargs):         super(activityform, self).__init__(*args, **kwargs)         if 'initial' in kwargs:             self.fields['participants'].queryset = member.objects.filter(group__id=initial.group.id)      class meta:          model = activity 

Comments

Popular posts from this blog

How to remove text and logo OR add Overflow on Android ActionBar using AppCompat on API 8? -

html - How to style widget with post count different than without post count -

url rewriting - How to redirect a http POST with urlrewritefilter -