2016-10-19 4 views
0

Im пытается создать новую книгу и просмотреть по запросу.POST. Проблема здесь заключается в том, что данные должны перейти к двум моделям с внешними ключами. Вот request.POST:Django добавить данные формы в две модели

def add(request): 
if request.method == 'POST': 
    result = Review.objects.addBook_and_Review(
     user=request.session['id'], 
     title=request.POST['title'], 
     author=request.POST['author'], 
     new_author=request.POST['new_author'], 
     review=request.POST['review'], 
     rating=request.POST['rating'] 
    ) 
    return redirect('add') 
else: 
    return render(request, 'books/add.html') 

А вот обычай менеджер и две модели (обзор и книги). Обратите внимание на модель обзора с внешними ключами.

class ReviewManager(models.Manager): 

    def addBook_and_Review(self, **kwargs): 
     #custom manager code here 
     return True 

class BookManager(models.Manager): 
    print('hit book manager') 
    pass 

class User(models.Model): 
    name = models.CharField(max_length=200) 
    alias = models.CharField(max_length=200) 
    email = models.EmailField() 
    pw_hash = models.CharField(max_length=200) 
    created_at = models.DateField(auto_now_add=True) 
    updated_at = models.DateField(auto_now=True) 
    objects = UserManager() 

class Book(models.Model): 
    title = models.CharField(max_length=200) 
    author = models.CharField(max_length=200) 
    created_at = models.DateField(auto_now_add=True) 
    updated_at = models.DateField(auto_now=True) 
    objects = BookManager() 

class Review(models.Model): 
    review = models.CharField(max_length=1000) 
    rating = models.CharField(max_length=200) 
    created_at = models.DateField(auto_now_add=True) 
    updated_at = models.DateField(auto_now=True) 
    user = models.ForeignKey(User, on_delete=models.CASCADE) 
    book = models.ForeignKey(Book, on_delete=models.CASCADE) 
    objects = ReviewManager() 
+2

Итак, в чем проблема? – ozgur

+0

Помимо того факта, что вы не проверяете свои данные; вы, безусловно, должны использовать форму для этого. –

ответ

0

Это очень просто. Если вы хотите создать книгу и Обзор объектов с помощью одного запроса POST, выполните следующие действия (продолжающуюся код):

def add(request): 
    if request.method == 'POST': 
     book = Book.objects.create(
      title=request.POST['title'], 
      author=request.POST['author'], 
     ) 

     result = Review.objects.addBook_and_Review(
      user=request.session['id'], 
      title=request.POST['title'], 
      author=request.POST['author'], 
      new_author=request.POST['new_author'], 
      review=request.POST['review'], 
      rating=request.POST['rating'], 
      book=review) 
     return redirect('add') 
    else: 
     return render(request, 'books/add.html') 

Рекомендуется, чтобы вы это сделать после проверки с использованием форм.

Смежные вопросы