モデルフォームのForeignKeyフィールドに表示されるオプションをフィルタリングするにはどうすればよいですか?ModelFormのForeignKeyフィールドのDjangoフィルタ選択肢
私はこのスレッドHow do I filter ForeignKey choices in a Django ModelForm?に従ってみましたが、私はDjangoにはかなり新しく、とても混乱しました。
は私がユーザーのためのアプリを持っている
別のアプリ(、関連していないのUserManager/AbstractUserモデルとの)について:
- 製品、PRODUCT_IDとPRODUCT_IDおよび製品名、
- 購入、とおよびuser_id。
チケットの別のアプリで、チケットを開くためのフォームがあります。
このフォームでは、ユーザーが購入した製品のみを表示したいので、ユーザーは自分が所有している製品のチケットのみを開くことができます。
以下のコードを、私は
チケットモデル
class Ticket(models.Model):
...
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='tickets')
product = models.ForeignKey('products.Product', related_name='tickets')
チケットの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)
...
など、非関連フィールドを削除しました
新規チケットフォームIは、フォーム内の{{ticket_form}}使用するテンプレートにビュー
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)
。
ありがとうございます。
他の提案や説明はありますか? ありがとうございました! – Ire