【问题标题】:Show related item django显示相关项目 django
【发布时间】:2022-01-10 05:38:09
【问题描述】:

我有以下型号:

类类别(models.Model): 名称 = models.CharField(max_length=255)

类元素(models.Model):

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

类主题(models.Model):

category = models.ForeignKey(Category)

element = models.ForeignKey(Element) 名称 = models.CharField(max_length=255)

我基本上需要在类别 id =1 中添加新主题,并且只获取属于类别 1 的 élément 列表

我在类别 id =1 中创建了一个视图新主题,但对于表单中的字段元素,我获取所有类别的所有元素

【问题讨论】:

    标签: django django-views django-forms


    【解决方案1】:

    你好,

    在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 类别_1 元素_2 类别_2 元素_3

    问题是当我需要在 category_1 中创建新主题时,我只需要显示属于类别 1 的元素而不是所有元素

    谢谢

    【讨论】:

      【解决方案2】:

      为此,您应该在Element 模型的category 字段中添加一个related_name

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

      然后,当您有一个主题对象时,您可以通过 obj.category.elements 访问主题类别的元素。

      如果您打算获取某个类别中的帖子列表,您将对从主题到类别的 FK 执行相同的操作(显然使用不同的名称)。

      【讨论】:

      • 感谢您的回复,我已经添加了 finame 但仍然无法正常工作,我的问题是当我添加新主题时(主题名称和元素名称应该是带有选项的参考字段)我得到了所有元素所有类别的结果,即使我属于类别 1
      • 如果您可以用您实际在做什么来扩展您的问题并举例说明您的期望与输出是什么,这将会很有帮助。
      猜你喜欢
      • 2012-09-25
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      • 2021-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      相关资源
      最近更新 更多