Django create_or_update(),unique_together,unique和primary

时间:2014-10-25 21:02:52

标签: 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 = 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会简单更新现有汽车,将颜色从红色变为绿色吗?或者会出现问题,因为我没有设置primary_key

此外,如果我使用primary_keyunique或它们是否相同,这是否重要?如果重要的话,我正在使用mySQL后端。

1 个答案:

答案 0 :(得分:1)

Django自动设置一个名为id的主键字段,除非您自己指定一个。因此,您的Car模型已经有id字段。它位于模型继承的基础模型类上。

在您的示例中,您尚未指定defaults方法的get_or_create()参数,因此Django将仅尝试使用您通过get调用传入的值来检索对象: https://docs.djangoproject.com/en/1.7/ref/models/querysets/#django.db.models.query.QuerySet.get_or_create

可以在字段上指定唯一约束,无论它是否为自动字段。有关更具体的信息,请参阅:https://docs.djangoproject.com/en/1.7/ref/models/fields/#unique

相关问题