요청 사용자에 따라 데이터를 선택하는 Django 양식

sshussain270

재료를 만드는 형식이있는 장고 애플리케이션을 개발 중입니다. 양식에는 레시피 선택을위한 드롭 다운이 포함되어 있습니다. 사용자가 재료를 만들 때 드롭 다운에 동일한 사용자가 만든 레시피 만 나타나기를 원합니다.

내 코드는 다음과 같습니다.

#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'드롭 다운에 표시된다는 것입니다. 그는 자신이 만든 드롭 다운 메뉴에서만 레시피를 볼 수 있어야합니다. 그것을 수행하는 방법에 대한 아이디어가 있습니까?

답변에서 업데이트 :

이것을 사용하는 경우 :

...
    if request.method == 'POST':
           form = IngredientForm(current_user=request.user, request.POST)
           if form.is_valid():
...

: 그것은 나에게이 구문 오류를 제공 non-keyword arg after keyword arg이 줄form = IngredientForm(current_user=request.user, request.POST)

업데이트 # 2 :

내가 사용하는 경우 :

...
    if request.method == 'POST':
           form = IngredientForm( request.POST,current_user=request.user)
           if form.is_valid():
...

오류가 발생합니다. __init__() got multiple values of argument 'current.user'

내가 사용하는 경우 :

...
    if request.method == 'POST':
           form = IngredientForm( request.POST)
           if form.is_valid():
...

오류가 발생합니다. 'QueryDict' object has no attribute 'id'

업데이트 # 3 :

답변에서 최신 업데이트를 구현 한 후. name 'current_user' is not defined다음 코드에서 오류가 발생 합니다.

def create_ingredient(request):
    form = IngredientForm(current_user=request.user)
nkhumphreys

모델 양식에서 다음을 수행 할 수 있습니다.

class IngredientForm(ModelForm):
    primal = forms.BooleanField()
    class Meta:
        model = Ingredient
        fields = ('recipe_id', 'title', 'instructions', 'rules')

    def __init__(self, current_user, *args, **kwargs):
        super(IngredientForm, self).__init__(*args, **kwargs)
        self.fields['recipe_id'].queryset = self.fields['recipe_id'].queryset.filter(user=current_user.id)

그런 다음 양식을 인스턴스화하십시오.

form = IngredientForm(current_user=request.user)

# 1 수정 :

사용자를 POST 요청 양식에 전달 :

if request.method == "POST":
    form = IngredientForm(request.POST, current_user=request.user)
    if form.is_valid():
        ....

편집 # 2 :

init decleration을 아래와 같이 변경하고 kwargs에서 사용자를 팝하십시오.

def __init__(self, *args, **kwargs):
    current_user = kwargs.pop('current_user', None)
    super(IngredientForm, self).__init__(*args, **kwargs)
    if current_user:
        self.fields['recipe_id'].queryset = self.fields['recipe_id'].queryset.filter(user=current_user.id)

이것이 문제를 해결할 수 있다고 생각하고 나머지 코드는 위의 답변과 동일하게 남겨 둡니다 (양식을 만드는 곳)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Django는 URL 요청에 따라 양식 드롭 다운 상자를 미리 채 웁니다.

분류에서Dev

사용자 선택에 따라 양식 요소를 표시하고 싶습니다.

분류에서Dev

사용자 선택에 따라 양식 요소를 표시하고 싶습니다.

분류에서Dev

사용자가 선택한 옵션에 따라 JQuery를 사용하여 양식을 제출하는 방법

분류에서Dev

콤보 박스에서 사용자 선택에 따라 양식 업데이트

분류에서Dev

콤보 박스에서 사용자 선택에 따라 양식 업데이트

분류에서Dev

웹 양식의 선택 필드 값에 따라 입력 필드의 데이터 요구 사항 변경

분류에서Dev

양식 제출에 따라 데이터가있는 구성 요소로드

분류에서Dev

django ModelForm을 사용하여 요청 된 사용자를 초기 값으로 제공하고 django 관리자에서 양식을 할당하는 방법

분류에서Dev

Django에서 수정 된 양식 요청 데이터 저장

분류에서Dev

플라스크를 사용하여 요청 된 양식 데이터로 Python에서 REST API를 호출하는 방법

분류에서Dev

PHP를 사용하여 선택에 따라 양식 필드를 활성화 / 비활성화하는 방법

분류에서Dev

Django에서 models.charfield 선택에 따라 사용자를 필터링하는 방법

분류에서Dev

Ajax 요청을 사용하여 양식 데이터 저장

분류에서Dev

양식 선택에 따른 라이브 업데이트 변수

분류에서Dev

Jquery를 사용하여 사용자 입력에 따라 양식 변경

분류에서Dev

Django-양식 구성 요소에 선택 대신 라디오 버튼 사용

분류에서Dev

사용자 선택에 따라 MYSQL 테이블의 데이터를 HTML 형식으로 출력

분류에서Dev

JavaScript를 사용하여 ajax 양식 직렬화와 동일한 HTTP 요청으로 양식 데이터 제출

분류에서Dev

선택 옵션을 요구하는 방법 사용자 선택 라디오 버튼 예 및 양식을 제출하기 전에 jQuery 또는 Javascript에서 아니오를 선택한 경우 필수 제거

분류에서Dev

사용자 유형에 따라 리디렉션하는 Django 데코레이터

분류에서Dev

Ajax를 사용하여 선택에 따라 데이터 변경

분류에서Dev

사용자가 액세스를 요청하는 조직에 따라 .NET Core 역할 수정 (요청 당)

분류에서Dev

데이터의 유효성을 검사하기 위해 양식 요청을 사용자 지정 요청에 전달하는 방법이 있습니까?

분류에서Dev

필요에 따라 데이터를 업데이트하는 ndarray

분류에서Dev

양식에서 django의 원시 데이터베이스로 요청

분류에서Dev

Django 비밀번호가 양식 데이터에 표시됨 (게시 / 요청)

분류에서Dev

(라 라벨) 데이터베이스에 양식 요청 파일 저장

분류에서Dev

Ajax GET 요청에 따라 체크 박스를 선택하도록 설정

Related 관련 기사

  1. 1

    Django는 URL 요청에 따라 양식 드롭 다운 상자를 미리 채 웁니다.

  2. 2

    사용자 선택에 따라 양식 요소를 표시하고 싶습니다.

  3. 3

    사용자 선택에 따라 양식 요소를 표시하고 싶습니다.

  4. 4

    사용자가 선택한 옵션에 따라 JQuery를 사용하여 양식을 제출하는 방법

  5. 5

    콤보 박스에서 사용자 선택에 따라 양식 업데이트

  6. 6

    콤보 박스에서 사용자 선택에 따라 양식 업데이트

  7. 7

    웹 양식의 선택 필드 값에 따라 입력 필드의 데이터 요구 사항 변경

  8. 8

    양식 제출에 따라 데이터가있는 구성 요소로드

  9. 9

    django ModelForm을 사용하여 요청 된 사용자를 초기 값으로 제공하고 django 관리자에서 양식을 할당하는 방법

  10. 10

    Django에서 수정 된 양식 요청 데이터 저장

  11. 11

    플라스크를 사용하여 요청 된 양식 데이터로 Python에서 REST API를 호출하는 방법

  12. 12

    PHP를 사용하여 선택에 따라 양식 필드를 활성화 / 비활성화하는 방법

  13. 13

    Django에서 models.charfield 선택에 따라 사용자를 필터링하는 방법

  14. 14

    Ajax 요청을 사용하여 양식 데이터 저장

  15. 15

    양식 선택에 따른 라이브 업데이트 변수

  16. 16

    Jquery를 사용하여 사용자 입력에 따라 양식 변경

  17. 17

    Django-양식 구성 요소에 선택 대신 라디오 버튼 사용

  18. 18

    사용자 선택에 따라 MYSQL 테이블의 데이터를 HTML 형식으로 출력

  19. 19

    JavaScript를 사용하여 ajax 양식 직렬화와 동일한 HTTP 요청으로 양식 데이터 제출

  20. 20

    선택 옵션을 요구하는 방법 사용자 선택 라디오 버튼 예 및 양식을 제출하기 전에 jQuery 또는 Javascript에서 아니오를 선택한 경우 필수 제거

  21. 21

    사용자 유형에 따라 리디렉션하는 Django 데코레이터

  22. 22

    Ajax를 사용하여 선택에 따라 데이터 변경

  23. 23

    사용자가 액세스를 요청하는 조직에 따라 .NET Core 역할 수정 (요청 당)

  24. 24

    데이터의 유효성을 검사하기 위해 양식 요청을 사용자 지정 요청에 전달하는 방법이 있습니까?

  25. 25

    필요에 따라 데이터를 업데이트하는 ndarray

  26. 26

    양식에서 django의 원시 데이터베이스로 요청

  27. 27

    Django 비밀번호가 양식 데이터에 표시됨 (게시 / 요청)

  28. 28

    (라 라벨) 데이터베이스에 양식 요청 파일 저장

  29. 29

    Ajax GET 요청에 따라 체크 박스를 선택하도록 설정

뜨겁다태그

보관