Форма Django для нескольких моделей не смогла вернуть HttpResponse - PullRequest
0 голосов
/ 20 сентября 2011

Я схожу с ума, пытаясь понять эту проблему. У меня есть форма, которая имеет несколько моделей. По сути, кто-то пишет историю, а затем вводит свое имя пользователя, и это имя пользователя связано с этой историей. Это все довольно просто ... очевидно, не для Джанго. Помимо поиска часов, чтобы найти что-то, что помогает с тем, что по существу является множественными вставками SQL, это кажется невозможным. Я получаю сообщение об ошибке не удалось вернуть HTTPResponseOBject, хотя я проверил отступ.

Вот мой взгляд:

def submit_story(request):
    if request.method == 'POST':
        f = request.POST.copy()
        sdata = {
            'author': f['username']
            }
        a = AuthorForm()
        p = StoryForm(sdata)
        if a.is_valid():
            a.save()
            if p.is_valid():
                p.save()
                return HttpResponseRedirect('/thanks/')

Вот мои модели:

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

class Story(models.Model):
    title = models.CharField(max_length=1000)
    text = models.CharField(max_length=5000)
    date = models.DateField()
    likes = models.IntegerField()
    dislikes = models.IntegerField()
    views = models.IntegerField()
    author = models.ForeignKey('Author')

Заранее спасибо. Я перешел на django с PHP, думая, что это будет проще, но такое многократное представление форм просто раздражает.

Ответы [ 2 ]

1 голос
/ 20 сентября 2011

Это не имеет ничего общего с несколькими моделями или вставками. Проблема должна быть очевидной: у вас есть набор вложенных операторов if и только один return прямо на самом глубоко вложенном бите. Что произойдет, если это не POST, или форма a недействительна, или форма p недействительна? Джанго ожидает, что представление вернет ответ при любых обстоятельствах, поэтому вам нужно возвращение независимо от того, что произойдет.

0 голосов
/ 20 сентября 2011

Я согласен с ответом Даниэля, что вам нужно возвращать ответ для всех ваших ветвей if.

Другая проблема заключается в том, что вы не привязываете AuthorForm к каким-либо данным. В вашем коде a.is_valid() всегда будет ложным.

Вместо

a = AuthorForm()

Вам нужно что-то вроде

a = AuthorForm(sdata)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...