我仍在尝试完全理解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_key
或unique
或它们是否相同,这是否重要?如果重要的话,我正在使用mySQL后端。
答案 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。