Python Django create_或_update()、unique_、unique和primary
我仍在努力完全理解Django模型,假设我有以下模型:Python Django create_或_update()、unique_、unique和primary,python,django,django-models,Python,Django,Django Models,我仍在努力完全理解Django模型,假设我有以下模型: class Manufacturer(models.Model): name = models.CharField(amx_length=255, unique=True) class Car(models.Model): name = models.CharField(max_length=255) color = models.CharField(max_length=255) manufacturer
class Manufacturer(models.Model):
name = models.CharField(amx_length=255, unique=True)
class Car(models.Model):
name = models.CharField(max_length=255)
color = models.CharField(max_length=255)
manufacturer = models.ForeignKey(Manufacturer)
unique_together = ('manufacturer', 'name')
我运行以下命令:
honda = Manufacturer.objects.get(name='Honda') #Let's assume this object already exists
car = Car.objects.get_or_create(name='Honda Accord', color='Red', manufacturer=honda)
car = Car.objects.get_or_create(name='Honda Accord', color='Green', manufacturer=honda)
Django会简单地更新现有的汽车,将颜色从红色改为绿色吗?还是会因为我没有设置主键而出现问题
另外,如果我使用主键
或唯一键
是否重要,或者它们是否相同?如果有必要,我会使用mySQL后端。Django会自动设置一个名为id
的主键字段,除非您自己指定一个。因此,您的汽车
型号将已经有一个id
字段。它位于模型继承的基本模型类上
在您的示例中,您没有指定get\u或\u create()
方法的defaults
参数,因此Django将仅尝试使用通过get调用传入的值检索对象:
无论字段是否为自动字段,都可以在字段上指定唯一约束。请参阅:了解更多具体信息。我在给所有3个字段赋值的get\u或\u create()中缺少了什么?这是否意味着将创建或更改副本?如果您查看文档,它会声明除非您提供可选参数defaults
,否则Django将传递get\u或\u create
中给出的值,以用于.get()
查找。Django不会尝试创建模型实例,除非除了要获取模型所需的值之外,您还传入了defaults={'':'value',…}
。谢谢,我误解了,当我最初阅读文档时,我会读到upYou's welcome。Django之所以成为如此伟大的框架,其中之一就是它的文档。这是我见过的最好的一些,但是熟悉源代码也很重要。啊,我把update\u或\u create
和get\u或\u create
搞混了。再次感谢