如何过滤模型表单中为ForeignKey字段显示的选项?
我试图关注这个帖子How do I filter ForeignKey choices in a Django ModelForm?,但我对Django很新,我很困惑。
我有一个用户应用程序(使用UserManager / AbstractUser模型,不相关)
另一个应用程序:
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)
在模板中,我在表单中使用{{ticket_form}}。
提前致谢。
答案 0 :(得分: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
是特定用户购买的产品名称列表。
希望这有帮助!