Model
class Sample(models.Model):
users = models.ManyToManyField(User, blank=True) # if not blank=True it will not be required, null=True is meaningless
Add
sample_object.users.add(1,2)
Remove
sample_object.users.remove(1,2)
Remove all
sample_object.users.clear()
Retrieve
# retrieve (from the model where it was declared)
sample_object.users.all()
# retrieve (from the other model)
user_object.sample_set.all()
Get by order
sample_object.users.all()[0]
# in template
{{ sample_object.users.all.0 }}
Filter
Article.objects.filter(reporter__in=Reporter.objects.filter(first_name='John')).distinct()
# or
translators.filter(teams__id=company.id).count()
# or
Segment.objects.filter(tms=instance) # the mtm field on segment model
Get value from multiple select
lang_list_str = request.POST.getlist('languages')
for language_str in lang_list_str:
lang_obj = Language.objects.get(id=language_str)
p1.target_languages.add(lang_obj)
Get value from multiple select
lang_list = request.POST.getlist('languages')
for language in lang_list:
lang_obj = Language.objects.get(id=language)
GlossaryLanguage(glossary=p1, language=lang_obj).save()
Retrieve in template
{% for locale in price.source_language_locales.all %}{{ locale }}
{% endfor %} # no set like OneToMany
# eg 2
{% for place in places %}
Name: {{ place.name }}
Area:
{% for area in place.area.all %}{{ area }}
{% endfor %}
{% endfor %}
Remove Modal
Button – Make sure to change values on inclick
JS
View
elif request.POST.get("form_type") == 'remove_source_locale':
print('remove_source_locale')
try:
record_to_reomve_fk_from = TranslatorPrice.objects.get(id=request.POST['id'])
record_to_reomve_fk_from.source_language_locales.remove(request.POST['fk_id'])
messages.success(request, "Locale is removed successfully.")
print('Record Removed')
except Exception as e:
print("Exception remove M2M ==========================")
messages.error(request, "Error. Something went wrong.")
print(e)
print("End of Exception ==========================")
return render(request, template_name, context)