2016-10-19 35 views
0

我試圖創建一個新書,並從request.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') 

這裏是自定義管理器和兩個模型(審查和預訂)。使用外鍵注意Review模型。

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') 

建議您使用表單驗證後,做到這一點。