Python 有没有办法从django表单中获取数据并上传到数据库?
我试图从Django表单中提取数据并将其上载到数据库 以下是我的模型:Python 有没有办法从django表单中获取数据并上传到数据库?,python,django,Python,Django,我试图从Django表单中提取数据并将其上载到数据库 以下是我的模型: class Category(models.Model): category = models.CharField(max_length = 128) def __str__(self): return f"{self.category}" class Meta: verbose_name_plural = 'Categories' class
class Category(models.Model):
category = models.CharField(max_length = 128)
def __str__(self):
return f"{self.category}"
class Meta:
verbose_name_plural = 'Categories'
class Listing(models.Model):
user = models.ForeignKey(User, on_delete = models.CASCADE, default = None)
title = models.CharField(max_length = 64)
description = models.TextField(max_length = 128)
bid = models.ForeignKey(Bid, on_delete = models.CASCADE, related_name = 'listing')
url = models.URLField(max_length = 350, blank = True)
category = models.ManyToManyField(Category, related_name='listings')
watchers = models.ManyToManyField(User, blank = True, related_name='listings')
因此,当用户添加新列表时,他们应该从类别中进行选择。下面是我在尝试了一段时间后是如何做到的:
def new_listing(request):
if request.method =="POST":
form = ListingForm(request.POST)
if form.is_valid():
bid = Bid(amount = int(request.POST['bid']))
bid.save()
listing = Listing()
listing.bid = bid
listing.user = request.user
listing.title = form.cleaned_data['title']
listing.description = form.cleaned_data['description']
listing.url = form.cleaned_data['url']
listing.save()
listing = Listing.objects.reverse()[0]
for category in form.cleaned_data['category']:
listing.category.add(category)
这里的问题是,我必须首先保存列表,然后再次拉它并手动添加类别。我只是想知道有没有更干净的方法?还是在Django就是这样做的?因为我很难做到更干净
此外,表单是由Django生成的,如下所示:
class ListingForm(ModelForm):
class Meta:
model = Listing
fields = ['title', 'description', 'url', 'category']
另外,这是创建表单的一个好方法,还是我应该使用
表单.Form
?处理多对多关系时,您需要在添加之前保存,这是正确的。
不过,您不需要进行反向查找,add
接受许多对象,而不仅仅是在
至于ModelForm,可以使用它,因为您正在尝试获取一个表单来创建模型。如果它是一个自定义表单来执行其他操作,那么您需要使用表单。表单
在处理多对多关系时,您需要在添加
之前保存
,这是正确的。
不过,您不需要进行反向查找,add
接受许多对象,而不仅仅是在
至于ModelForm,可以使用它,因为您正在尝试获取一个表单来创建模型。如果它是一个自定义表单来做其他事情,那么您需要使用表单。表单
不用担心。我强烈建议当你有这样的问题时,仔细阅读文档,文档做得很好,包含了很多答案。Django是一个很大的框架,有时候你用一种方式做事情,你会发现Django已经有了一种处理它的内置方式。祝你旅途好运!别担心。我强烈建议当你有这样的问题时,仔细阅读文档,文档做得很好,包含了很多答案。Django是一个很大的框架,有时候你用一种方式做事情,你会发现Django已经有了一种处理它的内置方式。祝你旅途好运!
listing.save()
listing.category.add(*form.cleaned_data["category"])