Для реляционных баз данных модель, в которой вы определяете ManyToManyField
, не имеет значения. Django создаст дополнительную таблицу с двумя ForeignKey
s для двух моделей, которые связаны ManyToManyField
.
Связанными менеджерами, которые будут добавлены, et c. это все Django лог c. За занавесками будет выполнен запрос к таблице посередине.
Однако вам необходимо исправить параметр related_name=…
[Django -doc] . related_name
указывает имя отношения в reverse , поэтому в данном случае от Course
до Profile
. Таким образом, это должно быть что-то вроде 'profiles'
:
class Profile(AbstractUser):
bio = models.TextField()
image = models.ImageField(default='defaults/user/default_u_i.png',
courses = models.ManyToManyField('home.Course'<b>, related_name='profiles'</b>)
def __str__(self):
return self.username
Таким образом, вы можете получить людей, которые участвуют в Course
объекте с помощью:
mycourse<b>.profiles.all()</b>
, и вы можете получить доступ к courses
, в котором Profile
зарегистрировано с:
myprofile<b>.courses.all()</b>
Для получения дополнительной информации см. отношение «многие ко многим» в документации .
Вы можете добавить курс к курсам пользователя с помощью:
@login_required
def course_add(request):
if request.method == 'POST':
form = CourseForm(request.POST)
if form.is_valid():
course = form.save()
request.user<b>.courses.add(course)</b>
else:
form = CourseForm()
context = {
'form': form
}
return render(request,'home/courses/course_add.html', context)