0

似たようなトピックについて 1 日で 2 つの質問をして申し訳ありませんが、私の django に対する知識が完全になくなりました。基本的に私は2つのモデルを持っています:

class Story(models.Model):
    title = models.CharField(max_length=1000)
    text = models.CharField(max_length=5000)
    date = models.DateField(default=datetime.date.today, editable=False)
    likes = models.IntegerField(default='0')
    dislikes = models.IntegerField(default='0')
    views = models.IntegerField(default='0')
    author = models.ForeignKey('Author', related_name="username")

    class Author(models.Model):
username = models.CharField(max_length=120, unique=True)
email = models.EmailField(blank=True)
firstname = models.CharField(max_length=500, blank=True)
lastname = models.CharField(max_length=500, blank=True)

あなたができるように、誰かが物語を提出し、その名前が著者のテーブルに入るという考えがあります。かなり単純なもの。私の問題は、ユーザーがストーリーと名前を送信できるフォームを作成することです。私は inlineformset を試しましたが、うまくいきませんでした。私が知っていることを実行する方法を見つけることができません。これは、単純な AND sql ステートメントの背後にあります。

ここに私のフォームモデルがあります: StoryAuthorFormSet = inlineformset_factory(Author, Story)

class StoryForm(ModelForm):
        class Meta:
            model = Story
            exclude = ('date', 'views', 'likes', 'dislikes', 'author')

これが私の見解です

def submit_story(request):
if request.method == 'POST':
    form = StoryForm(request.POST)
    if form.is_valid:
        #watch this nest part be aware of the author bit
        author = form.save(commit=False)
        story = StoryAuthorFormSet(request.POST, instance=author)
        if author_formset.is_valid():
            story.save()
            author_formset.save()
            return HttpResponseRedirect('/thanks/')
else:
    form = StoryForm()
    author_formset = StoryAuthorFormSet(instance=Author())
    return render_to_response('submit/submit_story.html', locals(), context_instance=RequestContext(request))

私はそれらがおそらく私が見逃した単純な解決策であることを理解しています...しかし、どんなアイデアでも大歓迎です...とても困惑しているので、必要な人のために無料のClojureとErlangプログラミングを行います.それ!

4

1 に答える 1

1

この例では、インライン フォームセットは必要ありません。特定の著者のために一度に複数のストーリーを送信する必要がある場合にのみ、これを使用します。

また、あなたのモデルについて変更したいことがあります。

title = models.CharField(max_length=1000)
text = models.CharField(max_length=5000)

少なくともテキスト部分については、TextField の方が適切かもしれません。

私はそれを次のように解決します: を作成し、それとAuthorForm既存の両方をStoryForm同じビューで使用します。

したがって、ロジックは次のようになります。

author_form = AuthorForm(request.POST)
if author_form.is_valid():
    author = author_form.save()
    story_form = StoryForm(request.POST)
    if story_form.is_valid():
        story = story_form.save(commit=False)
        story.author = author
        story.save()

パラメータを使用して、フォームのinstance既存のモデルを指定します。たとえば、既存のデータベース エントリを更新したいとします。

于 2011-09-20T13:57:34.103 に答える