0

私の最初の Django プロジェクトでは、各オブジェクト (タイトル、著者など) を説明するさまざまなフィールドを使用して、ユーザーがメディア (本、映画など) のリストを作成できるアプリを作成しようとしています。保存する方法を説明します。つまり、フォームが送信されても​​何も起こりません。誰かが私が間違っていることを教えてもらえますか? これが初心者の質問である場合は申し訳ありません。ここで本当に基本的なものが欠けているようです。(ModelForms の代わりに基本的な HTML フォームを使用しています。これは、一部のメディア タイプでは特定のフィールド (映画の「作成者」など) を無視したいためですが、ModelForms を使用してそれを行う簡単な方法があれば、私はすべて耳にします。)

からviews.py:

def editbook(request,list_owner,pk):
    book_list = Item.objects.all().filter(item_creator=list_owner).filter(category='book').order_by('type','name')  
    item_to_edit = Item.objects.get(pk=pk)
    if request.method == 'POST':
        item_to_edit.save()
        return render_to_response('books.html', {'booklist': book_list, 'listowner': list_owner}, RequestContext(request))
    else:
        form=EditItem()
        return render_to_response('editbook.html', {'listowner': list_owner, 'item_to_edit': item_to_edit}, RequestContext(request))

models.py から:

CATEGORY_CHOICES = (
    ('book','book'),
    ('tv','tv'),
    ('movie','movie'),
    ('game','game'),
    ('music','music'),
)

class Item(models.Model):
    item_creator = models.CharField(max_length=30) # user name goes here
    category = models.CharField(max_length=5, choices=CATEGORY_CHOICES)
    name = models.CharField(max_length=70)
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)  
    artist = models.CharField(max_length=70, blank=True)
    type = models.CharField(max_length=50, blank=True)
    progress = models.CharField(max_length=10, blank=True)
    finished = models.BooleanField(default=False)
    rating = models.IntegerField(default=0, blank=True, null=True)
    comment = models.CharField(max_length=140, blank=True)
    def __unicode__(self):
        return self.name
4

2 に答える 2

1

もちろん、モデルフォームで一部のフィールドのみを使用する方法もあります:フォームでフィールドのサブセットを使用するで完全に説明されているように、フォームの Meta クラスでfieldsまたは属性を使用できます。exclude

ただし、szaman が指摘しているように、POST データをフォームに渡して有効性を確認する必要があります。さらにinstance、既存のインスタンスを更新するときにパラメーターを渡す必要があります。

于 2012-11-03T08:20:55.243 に答える
0

私が見ているのは、データベースからオブジェクトを取得し、フォームが送信されると、オブジェクトを保存するだけではなく、フィールドを更新しないため、dbの変更を確認できないことです。やってみてください:

if request.method == "POST":
        form = MyForm(request.POST)
        logging.info("form.is_valid() %s" % form.is_valid())
        if form.is_valid():
            item_to_edit.name = form.cleaned_data['name']
            item_to_edit.save()
...
于 2012-11-03T08:14:06.050 に答える