私は食材を作成するためのフォームを持つdjangoアプリケーションを開発しています。フォームには、レシピを選択するためのドロップダウンが含まれています。ユーザーが原料を作ったとき、ドロップダウンには、同じユーザーが作成したレシピだけが表示されます。Djangoはリクエストユーザに基づいてデータを選択します。
#forms.py
class IngredientForm(forms.ModelForm):
primal = forms.BooleanField()
class Meta:
model = Ingredient
fields = ('recipe_id', 'title', 'instructions', 'rules')
#models.py
class Recipe(models.Model):
user = models.ForeignKey('auth.User')
title = models.CharField(max_length=500)
description = models.TextField(max_length=500)
rules = models.TextField(max_length=500,blank=True)
def __str__(self):
return self.title
class Ingredient(models.Model):
user = models.ForeignKey('auth.User')
recipe_id = models.ForeignKey(Recipe, on_delete=models.CASCADE)
title = models.CharField(max_length=500)
instructions = models.CharField(max_length=500)
rules = models.TextField(max_length=500,blank=True)
primal = models.CharField(default='0',max_length=500,blank=True)
def __str__(self):
return self.title
#views.py
def create_ingredient(request):
if request.method == 'POST':
form = IngredientForm(request.POST)
if form.is_valid():
current_user = request.user
data = form.cleaned_data
ingredient_data=Ingredient.objects.create(user=current_user, recipe_id=data['recipe_id'],title=data['title'], primal=data['primal'], instructions=data['instructions'], rules=data['rules'])
ingredient_data.save()
ingredient = Ingredient.objects.get(pk = ingredient_data.pk)
return redirect('ingredient_detail', pk=ingredient.pk)
else:
messages.error(request, "Error")
return render(request, 'create_ingredient.html', {'form': IngredientForm })
問題は今、ユーザーがレシピを選択しようとすると、サイトのすべてのユーザーが作成したレシピは「recipe_id」ドロップダウンに表示されていることである:
は、ここに私のコードです。彼は自分で作成されたレシピをドロップダウンでしか見ることができません。どのようにそれを行うにはどのようなアイデア? ANSWER FROM
UPDATE:
私はこれを使用する場合:この行のnon-keyword arg after keyword arg
form = IngredientForm(current_user=request.user, request.POST)
UPDATE#2:
...
if request.method == 'POST':
form = IngredientForm(current_user=request.user, request.POST)
if form.is_valid():
...
を、それは私にこの構文エラーを与える
もしI使用:
...
if request.method == 'POST':
form = IngredientForm(request.POST,current_user=request.user)
if form.is_valid():
...
私が使用している場合は
__init__() got multiple values of argument 'current.user'
:
は、それは私にエラーを与えるの答えから最新のアップデートを実施した後
:'QueryDict' object has no attribute 'id'
UPDATE#3:それは私にエラーを与える
...
if request.method == 'POST':
form = IngredientForm(request.POST)
if form.is_valid():
...
。あなたがこれを行うことができ、モデルの形で
def create_ingredient(request):
form = IngredientForm(current_user=request.user)
私はそれをviews.py:form = IngredientForm(current_user = request.user)で使用する必要がありますか? – Elisha512
が正しい。あなたが 'return render(request、 'create_ingredient.html'、{'form':IngredientForm})という行を持っていれば、' IngredientForm'をリクエストを受けたインスタンス化されたフォームに置き換えます。ユーザーは引数として – nkhumphreys
ありがとう@nkhumphreysそれは働いたが、1つの問題がある。フォームを送信すると、次のセグメントにエラーが表示されます。form = IngredientForm(request.POST) if form.is_valid():....このエラーを解決できる場合は、正しい回答としてマークします。それが私に与えるエラーIngredientFormオブジェクトは呼び出し可能ではありません – Elisha512