首页 文章

Django过滤了ModelForm中ForeignKey字段的选择

提问于
浏览
1

如何过滤模型表单中为ForeignKey字段显示的选项?

我试着按照这个帖子How do I filter ForeignKey choices in a Django ModelForm?但是我对Django很新,我很困惑 .

我有一个用户的应用程序(与UserManager / AbstractUser模型,不相关)

另一个应用程序:

  • 产品,包含product_id和产品名称,

  • 使用product_id和user_id购买 .

Tickets的另一个应用程序,带有打开票证的表单 .

在该表格中,我只想显示用户购买的产品,因此用户只能打开他所拥有的产品的票证 .

我在下面的代码中删除了不相关的字段等 .

门票模型

class Ticket(models.Model):
   ...
    user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='tickets')
    product = models.ForeignKey('products.Product', related_name='tickets')

Ticket ModelForm

class TicketForm(forms.ModelForm):
    class Meta:
        model = Ticket
        fields = ['subject', 'reason', 'product']

产品和购买模型

class Product(models.Model):
    name = models.CharField(max_length=100, default="")
    ...


class Purchase (models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='purchases')
    product = models.ForeignKey(Product)
    ...

新的票证表单视图

def new_ticket(request):
    if request.method=='POST':
        ticket_form = TicketForm(request.POST)
        ...

        if ticket_form.is_valid() and comment_form.is_valid():
            ticket = ticket_form.save(False)
            ticket.user = request.user
            ticket.save()
            ...
            return redirect(reverse('ticket-detail', args={ticket.pk}))
    else:
        ticket_form = TicketForm()

    args={'ticket_form':ticket_form}
    args.update(csrf(request))
    return render(request, 'tickets/ticket_form.html',args)

在模板中,我在表单中使用{} .

提前致谢 .

1 回答

  • 0

    只需通过映射 user 外键查找用户进行的所有购买 . 一旦您购买,您还将拥有相应的产品 .

    user = 'your user object here'
    purchases = Purchase.objects.filter(user=user)
    products = [purchase.product for purchase in purchases]
    

    现在您的 products 列表是用户购买的对象列表 . 如果您想要购买的名称,只需添加以下行:

    product_names = [product.name for product in products]
    

    其中 product_names 是特定用户购买的产品名称列表 .

    希望这可以帮助!

相关问题