小编Joh*_*ohn的帖子

使用get_or_create的Django表单

我正在使用Django ModelForms来创建表单.我已经设置了表单并且工作正常.

form = MyForm(data=request.POST)

if form.is_valid():
    form.save()
Run Code Online (Sandbox Code Playgroud)

我现在想要的是首先检查表单是否存在相同的记录.如果是的话,我希望它获取该对象的id,如果不是,我希望它将它插入数据库,然后给我该对象的id.是否可以使用以下内容:

form.get_or_create(data=request.POST)
Run Code Online (Sandbox Code Playgroud)

我知道我能做到

form = MyForm(instance=object)
Run Code Online (Sandbox Code Playgroud)

在创建表单时,但这不起作用,因为我仍然想要没有对象实例的情况

编辑:

说我的模型是

class Book(models.Model):
    name = models.CharField(max_length=50)
    author = models.CharField(max_length=50)
    price = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)

我想要一个有人可以填写书籍的表格.但是,如果数据库中已有一本书具有相同的名称,作者和价格,我显然不希望再次添加此记录,所以只想找出它的ID而不是添加它.

我知道Django中有一个函数; get_or_create这样做但是表格有类似的东西吗?或者我必须做类似的事情

if form.is_valid(): 
    f = form.save(commit=false)
    id = get_or_create(name=f.name, author=f.author, price=f.price)
Run Code Online (Sandbox Code Playgroud)

谢谢

django django-forms

22
推荐指数
1
解决办法
8587
查看次数

django url模式为%20

在Django中,我需要使用什么url模式来处理urlencode字符,例如%20

我正在使用,(?P<name>[\w]+)但这只处理字母数字字符,因此%导致错误

django django-urls

22
推荐指数
2
解决办法
1万
查看次数

在init上创建django表单

如何在表单init函数中添加字段?例如,在下面的代码中,我想添加一个配置文件字段.

class StaffForm(forms.ModelForm):
    def __init__(self, user, *args, **kwargs):
        if user.pk == 1:
            self.fields['profile'] = forms.CharField(max_length=200)

        super(StaffForm, self).__init__(*args, **kwargs)

    class Meta:
        model = Staff
Run Code Online (Sandbox Code Playgroud)

我知道我可以在类StaffForm ....行下面添加它但我希望这是动态的,具体取决于传入的用户,所以不能这样做.

谢谢

django django-forms

21
推荐指数
1
解决办法
2万
查看次数

mysql - 插入后忽略获取主键

我正在insert ignore into........使用Python 在mysql中运行查询

运行查询后,我想知道该行的主键.我知道有查询

SELECT LAST_INSERT_ID();
Run Code Online (Sandbox Code Playgroud)

但我不确定它是否适用于插入忽略

做这个的最好方式是什么?

mysql

21
推荐指数
2
解决办法
2万
查看次数

Python检查对象是否在对象列表中

我在Python中有一个对象列表.然后我有另一个对象列表.我想浏览第一个列表,看看是否有任何项目出现在第二个列表中.

我以为我可以做到

for item1 in list1:
    for item2 in list2:
        if item1 == item2:
            print "item %s in both lists"
Run Code Online (Sandbox Code Playgroud)

然而,这似乎不起作用.虽然我这样做:

if item1.title == item2.title:
Run Code Online (Sandbox Code Playgroud)

它工作正常.我有比这更多的属性,所以不要真的想做一个大的if语句比较所有的属性,如果我不需要.

任何人都可以给我帮助或建议我能做些什么来找到两个列表中出现的对象.

谢谢

python

19
推荐指数
3
解决办法
4万
查看次数

Django模型中的非数据库字段

是否有可能在Django模型中有一个不存储在数据库中的字段.
例如:

class Book(models.Model):
    title = models.CharField(max_length=75)
    description models.CharField(max_length=255, blank=True)
    pages = models.IntegerField()
    none_db_field = ????
Run Code Online (Sandbox Code Playgroud)

那我可以做

book = Book.objects.get(pk=1)
book.none_db_field = 'some text...'
print book.none_db_field
Run Code Online (Sandbox Code Playgroud)

谢谢

django

18
推荐指数
3
解决办法
1万
查看次数

如果不存在,Django会创建userprofile

request.user.get_profile()在我的代码中使用了很多地方.但是,并非所有用户都拥有与其帐户相关联的用户个人资料.有没有什么方法可以在调用时自动创建用户配置文件,request.user.get_profile()如果他们没有用户配置文件而不必更改我的每个request.user.get_profile()电话.也许使用信号或其他东西.

我遇到的问题是我使用单点登录登录,所以如果有人登录到另一个系统,然后进入我的网站,他们就会登录但是没有创建用户配置文件(我在他们登录时创建用户配置文件)在).

django

18
推荐指数
1
解决办法
1万
查看次数

循环遍历从特定键到列表末尾的列表

在Python中如何从一个键开始循环列表,而不是从一开始.例如

l = ['a','b','c','d']
Run Code Online (Sandbox Code Playgroud)

循环l但从b开始,例如l[1]

python

16
推荐指数
2
解决办法
2万
查看次数

按对象属性分组php对象数组

我有一个带有3个属性的php对象(书):name, category, description 然后我book在数组中有这些对象的列表.我想为这些按对象分组的对象创建一个新的关联数组category.

假设我在一个名为的数组中有4个书对象 $books

name    category  description
==================================
book1   cat1     this is book 1
book2   cat1     this is book 2
book3   cat2     this is book 3
book4   cat3     this is book 4
Run Code Online (Sandbox Code Playgroud)

如何创建一个名为的关联数组 $categories

$categories['cat1'] = array(book1, book2)
$categories['cat2'] = array(book2)
$categories['cat3'] = array(book3)
Run Code Online (Sandbox Code Playgroud)

哪本书?是书的对象,而不是单词

php

14
推荐指数
2
解决办法
1万
查看次数

在单个查询中获取外键对象 - Django

我的django代码中有2个模型:

class ModelA(models.Model):
    name = models.CharField(max_length=255)
    description = models.CharField(max_length=255)
    created_by = models.ForeignKey(User)

class ModelB(models.Model):
    category = models.CharField(max_length=255)
    modela_link = models.ForeignKey(ModelA, 'modelb_link')
    functions = models.CharField(max_length=255)
    created_by = models.ForeignKey(User)
Run Code Online (Sandbox Code Playgroud)

假设ModelA有100条记录,所有记录都可能有也可能没有指向ModelB的链接

现在说我想获得每个ModelA记录的列表以及ModelB的数据

我会做:

list_a = ModelA.objects.all()
Run Code Online (Sandbox Code Playgroud)

然后,为了获得ModelB的数据,我必须这样做

for i in list_a:
    i.additional_data = i.modelb_link.all()
Run Code Online (Sandbox Code Playgroud)

但是,这会在i的每个实例上运行查询.从而使101个查询运行.

有没有办法在一个查询中运行这一切.或者至少少于101个查询.

我试过投入,ModelA.objects.select_related().all()但这似乎没有任何影响.

谢谢

python django django-queryset

12
推荐指数
1
解决办法
1万
查看次数