Просмотр выпадающего списка по условию 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
==== Вывод, когда пользователь не вошел в систему, отображает все категории ====
==== Вывод, когда пользователь один вошел в систему отображения category1,category2 ====
==== Вывод при входе пользователя два на дисплей category3,category4 ====
======== админ панель категория модель ===========
================================================
с выбором 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 ===========