Просмотр выпадающего списка по условию Django Model Forms

У меня есть модель категорий с названием

class Category(models.Model):
    user = models.ForeignKey(user, on_delete=CASCADE)
    title = models.CharField(max_length = 20)

У меня есть другая модель с много-много полей категорий

class Product(models.Model):
    user = models.ForeignKey(user, on_delete=CASCADE)
    Category = models.ManyToManyField(Category)
    title = models.CharField(max_length = 20)

В обеих моих моделях есть пользовательский внешний ключ.

Я создал форму продукта, используя django modelforms.

class ProductForm(forms.ModelForm):
    class Meta:
        model = Product
        fields = '__all__'

Проблема в том, что я получаю категории другого пользователя. как показать только категории этого конкретного пользователя? чтобы один пользователь не видел категории другого пользователя

=========== views.py =============

def HomeView(request):
  form = ProductForm(user_id=request.user.id)
  context = {
    'form':form
  }
  return

render(request,'index.html',context)

========= form.py ===============

from django import forms
from .models import *

class ProductForm(forms.ModelForm):

    def __init__(self, user_id, *args, **kwargs):
        super(ProductForm, self).__init__(*args, **kwargs)
        if user_id is not None:
            self.fields['category'].widget = forms.Select(choices = Category.objects.filter(user=user_id).values_list('title','title'))
        else:
            self.fields['category'].widget = forms.Select(choices = Category.objects.all().values_list('title','title'))
        
    class Meta:
        model = Product
        fields = '__all__'
        exclude = ['user']

=============== models.py ===============

from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Category(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length = 20)

    def __str__(self):
        return self.title

class Product(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE,)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    title = models.CharField(max_length = 20)

    def __str__(self):
        return self.title

==== Вывод, когда пользователь не вошел в систему, отображает все категории ====

enter image description here

==== Вывод, когда пользователь один вошел в систему отображения category1,category2 ====

enter image description here

==== Вывод при входе пользователя два на дисплей category3,category4 ====

enter image description here

======== админ панель категория модель ===========

enter image description here

================================================

с выбором MultiSelect

================================================

======= form.py ========

from django import forms
from .models import *

class ProductForm(forms.ModelForm):

    def __init__(self, user_id, *args, **kwargs):
        super(ProductForm, self).__init__(*args, **kwargs)
        if user_id is not None:
            self.fields['category'].widget = forms.SelectMultiple(choices = Category.objects.filter(user=user_id).values_list('title','title'))
        else:
            self.fields['category'].widget = forms.SelectMultiple(choices = Category.objects.all().values_list('title','title'))
        
    class Meta:
        model = Product
        fields = '__all__'
        exclude = ['user']

======= views.py =========

from django.shortcuts import render
from .form import *

def HomeView(request):
  form = ProductForm(user_id=request.user.id)
  context = {'form':form}
  return render(request,'index.html',context)

========== html ===========

{% extends "base.html" %}
{% block title %}
     Index | Page 
{% endblock title %}
   
{% block body %}
  <h1>Current user : {{request.user}}</h1>
  <hr>
  <form action="" method="POST">
    {% csrf_token %}

    {{form.as_p}}
    <button type="submit">submit</button>
  </form>
{% endblock body %}

======== modals.py ==========

from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Category(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length = 20)

    def __str__(self):
        return self.title

class Product(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE,)
    category = models.ManyToManyField(Category)
    title = models.CharField(max_length = 20)

    def __str__(self):
        return self.title

=========== screenshot ouput ===========

enter image description here

enter image description here

enter image description here

Вернуться на верх