Python Django create_或_update()、unique_、unique和primary

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

我仍在努力完全理解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 = 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
搞混了。再次感谢