0

ユーザーが新しい「フィード」を入力するときに使用できる「カテゴリ」の数を、ユーザーが所有し、作成したカテゴリのみに制限しようとしています。現在の動作方法は、ユーザーがフォームに表示される他のユーザーの「カテゴリ」に「フィード」を追加できることです。どうすれば修正できますか?

ありがとう!-M

models.py

from django.db import models
from django.contrib.auth.models import User

class Category(models.Model):
    name = models.CharField(max_length=50)
    user = models.ForeignKey(User)

class Feed(models.Model):
    url = models.URLField()
    name = models.CharField(max_length=50)
    created = models.DateTimeField(auto_now_add=True)
    description = models.TextField(blank=True)
    category = models.ForeignKey(Category)
    user = models.ForeignKey(User)

フォーム.py

class FeedForm(forms.ModelForm):

    class Meta:
        model = Feed
        exclude = ['user']

ビュー.py

def addfeed(request, user):
    user = request.user
    page_title = "Add feed"
    instance = Category.objects.filter(user=request.user)
    if request.method == 'POST':
        form = FeedForm(request.POST, instance=instance)
        if form.is_valid():
            feed = form.save(commit=False)
            feed.user = request.user  
            feed.save()
            return HttpResponseRedirect("/user/" + user.username + "/manage")
    else:
        form = FeedForm()
    return render(request, "form_manage.html", {
        'page_title': page_title,
        'form': form,
    })
4

2 に答える 2

1

querysetフィールドの属性をどこかに設定します。ユーザーに依存するため、フォームのインスタンス化中またはインスタンス化後に設定する必要があります。たとえば、ビューでそれを行う方法は次のとおりです。

def addfeed(request, user):
    user = request.user # why does this view take user as an arg and then reassign?
    page_title = "Add feed"
    categories = Category.objects.filter(user=request.user)
    if request.method == 'POST':
        form = FeedForm(request.POST)
        form.fields['category'].queryset = categories
        if form.is_valid():
            feed = form.save(commit=False)
            feed.user = request.user  
            feed.save()
            return HttpResponseRedirect("/user/" + user.username + "/manage")
    else:
        form = FeedForm()
        form.fields['category'].queryset = categories
    return render(request, "form_manage.html", {
        'page_title': page_title,
        'form': form,})

POST ケースのフォーム構築の引数を削除しました。これは、カテゴリ クエリセットではなく、instance既存のインスタンスを渡すことを目的としているためです。Feed

__init__正しいカテゴリのクエリセットを渡すと、フォームでこれを行うこともできます。

于 2013-10-16T21:01:03.793 に答える
0

javascriptはこれを行うために使用します。たとえば、関連するカテゴリのリストを追加のコンテキストとしてビューに渡し、テンプレートで JavaScript を使用して、フォームの事前入力されたオプション フィールドを空にし、それを追加のコンテキストに置き換えることができます。

于 2013-10-16T20:56:02.627 に答える