Wie kann ich die für ein ForeignKey-Feld in einem Modellformular angezeigten Optionen filtern?Django-Filterauswahl im ForeignKey-Feld in einem ModelForm
Ich habe versucht, diesem Thread How do I filter ForeignKey choices in a Django ModelForm? zu folgen, aber ich bin ziemlich neu in Django und ich wurde sehr verwirrt.
Ich habe eine App für Nutzer (mit Usermanager/AbstractUser Modelle, nicht relevant)
Eine weitere App für:
- Produkte, mit product_id und Produktnamen, die
- Käufe, mit product_id und Benutzer-ID.
Eine weitere App für Tickets, mit einem Formular, um ein Ticket zu öffnen.
In diesem Formular möchte ich nur die Produkte zeigen, die der Benutzer gekauft hat, so dass der Benutzer nur ein Ticket für die Produkte öffnen kann, die er hat.
-Code unten, ich habe entfernt nicht relevante Felder etc.
Ticket Modell
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']
Produkt & Kauf Modelle
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)
...
Neues Ticket Formularansicht
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)
In der Vorlage I {{ticket_form}} in der Form verwendet werden.
Vielen Dank im Voraus.
Jede andere Anregung/Erklärung? Danke in fortgeschrittenem! – Ire