Показать связанный элемент django

У меня есть следующие модели:

class Category(models.Model): name = models.CharField(max_length=255)

class Element(models.Model):

category = models.ForeignKey(Category)
name = models.CharField(max_length=255)

class Topic(models.Model):

category = models.ForeignKey(Category)

element = models.ForeignKey(Element) name = models.CharField(max_length=255)

Мне нужно добавить новую тему в категорию id =1 и получить только список элементов, принадлежащих категории 1

Я создал представление Новая тема в категории id =1, но для элементов полей в форме я получаю все элементы для всех категорий

Для этого необходимо добавить related_name к полю category в модели Element.

ex

category = models.ForeignKey(Category, related_name='elements')

Затем, когда у вас есть объект темы, вы можете получить доступ к элементам для категории темы, выполнив obj.category.elements.

Если вы планируете получить список сообщений в категории, вы сделаете то же самое (очевидно, с другим именем) с FK от Topic to Category.

Желтый,

Ниже models.py

class Category(models.Model):
    name = models.CharField(max_length=50, unique=True)
    description = models.CharField(max_length=150)

class Element(models.Model):
    category = models.ForeignKey(Category, related_name='elements', on_delete=models.CASCADE)
    element = models.CharField(max_length=50)

class Topic(models.Model):
    subject = models.CharField(max_length=255)
    element = models.ForeignKey(KPI, related_name='topics', on_delete=models.CASCADE)
    category = models.ForeignKey(Category, related_name='tickets', on_delete=models.CASCADE)
    created_by = models.ForeignKey(User, related_name='tickets', on_delete=models.CASCADE)
    created_date = models.DateTimeField(auto_now_add=True)
   

views.py

def new_topic(request, category_id):
    category = get_object_or_404(Category, pk=category_id)
    kpi = KPI.objects.select_related().filter(category=category_id)
    #user = User.objects.first()
    if request.method == "POST":
        form = NewTopicForm(request.POST)

        if form.is_valid():
           topic = form.save(commit=False)
           topic.category = category
           topic.created_by = request.user
           topic.save()

       

           post = Post.objects.create(
                message=form.cleaned_data.get('message'),
                
                topic=topic
           )
           return redirect('category_topic', category_id=category.pk)
    else:

        form = NewTopicForm()

    return render(request, 'new_topic.html', {'category': category, 'form':form}
                  )

forms.py

class NewTopicForm(forms.ModelForm):

    message = forms.CharField(widget=forms.Textarea, max_length=6000)

    class Meta:
        model = Topic
        fields = ['subject', 'issue_date', 'message', 'element']

Некоторые элементы были созданы с помощью интерфейса администратора, такие как

Категория_1 элементы_1 Элементы_2 категории_1 Категория_2 элементы_3

Вопрос в том, что когда мне нужно создать новую тему в категории_1, мне нужно показать только элементы, принадлежащие категории 1, а не все элементы

Спасибо

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