【问题标题】:Django add form data in two modelsDjango在两个模型中添加表单数据
【发布时间】:2016-10-19 18:16:38
【问题描述】:

我正在尝试根据 request.POST 创建一本新书并进行评论。这里的问题是数据需要使用外键进入两个模型。这是请求。POST:

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 和 Book)。请注意带有外键的 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()

【问题讨论】:

  • 那有什么问题?
  • 除了您不验证您的数据;你当然应该使用表格来做到这一点。

标签: django django-models


【解决方案1】:

这很容易。如果您想使用一个 POST 请求创建 Book 和 Review 对象,请执行以下操作(继续您的代码):

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

建议您在使用表单验证后执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 2013-03-24
    • 2022-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多