Comment filtrer les options affichées pour un champ ForeignKey dans un formulaire modèle?Choix du filtre Django dans le champ ForeignKey dans une ModelForm
J'ai essayé de suivre ce fil How do I filter ForeignKey choices in a Django ModelForm? mais je suis assez nouveau à Django et j'ai été très confus.
J'ai une application pour les utilisateurs (avec un UserManager/modèles AbstractUser non pertinents)
Une autre application pour:
- Produits, avec product_id et nom du produit,
- Achats, avec product_id et user_id.
Une autre application pour les billets, avec un formulaire pour ouvrir un ticket.
Dans cette forme je veux montrer seulement les produits que l'utilisateur a achetés, ainsi l'utilisateur peut seulement ouvrir un billet pour les produits qu'il a.
code ci-dessous, je l'ai retiré non champs pertinents, etc.
Modèle Ticket
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']
Produit & Achat Modèles
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)
...
nouveau ticket vue formulaire
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)
Dans le modèle que j'utilise {{}} ticket_form dans le formulaire.
Merci d'avance.
Autre suggestion/explication? Merci à l'avance! – Ire