Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django-唯一模型数据_Django_Unique_Models_Digital Signature_Django Signals - Fatal编程技术网

Django-唯一模型数据

Django-唯一模型数据,django,unique,models,digital-signature,django-signals,Django,Unique,Models,Digital Signature,Django Signals,例如: 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 CarI

例如:

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会解决这个问题吗?无论何时创建汽车、图像、信息,都会发送信号来创建CarImage?

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

字段名集,这些字段名加在一起必须是唯一的

Django将确保每当您创建
CarImage
对象时,
image
car
message
字段集合都是唯一的

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

我说的对吗?问题是您有图像和汽车表,需要根据上述两个表中的现有数据填充新表CarImage?您能提供CarImage的模型定义吗?正确,加上一些任意数据,如“消息”。我必须经常检查是否有任何图像、汽车或信息被添加到CarImage中。