Django - 独特的模型数据

Django - Unique model data

例如:

class CarImage(models.Model):
    image = models.ForeignKey(Image)
    car = models.ForeignKey(Car)
    message = models.TextField()


message = 'awesome car'
for image in Image.objects.all():
    for car in Car.objects.all():
        if not CarImage.objects.filter(
            Q(image=image), 
            Q(car=car), 
            Q(message=message),
            ):
            carimage = CarImage()
            carimage.image = image
            carimage.car = car
            carimage.message = message
            carimage.save()

有没有更有效的方法来创建基于多个字段的独特模型?签名字段会让这更好吗?或者 Django Signals 会解决这个问题 - 每当创建 Car,Image,消息时发送信号来创建 CarImage?

您可以在 CarImage 模型 Meta 中添加 unique_together 约束。

Sets of field names that, taken together, must be unique.

Django 将确保无论何时您创建一个 CarImage 对象,imagecarmessage 字段集都是唯一的。

class CarImage(models.Model):
    image = models.ForeignKey(Image)
    car = models.ForeignKey(Car)
    message = models.TextField()

    class Meta:
        unique_together = (('image', 'car', 'message'),) # define unique_together constraint