Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有办法从django表单中获取数据并上传到数据库?_Python_Django - Fatal编程技术网

Python 有没有办法从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

我试图从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 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"])