我的Django应用中有以下模型:
class Dataset(models.Model):
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False
)
name = models.CharField(max_length=100, blank=False)
created_date = models.DateTimeField(auto_now_add=True)
last_modified = models.DateTimeField(auto_now=True)
class Imagefile(models.Model):
uuid = models.CharField(max_length=36, default="")
name = models.CharField(max_length=100, default="")
file = models.FileField(upload_to=image_directory_path)
dataset = models.ForeignKey(
Dataset,
on_delete=models.CASCADE,
related_name="imagefiles",
blank=False,
null=False,
)
class Annotation(models.Model):
image = models.FileField(upload_to=image_annotation_directory_path)
json = models.JSONField(default=dict)
imagefile = models.ForeignKey(
Imagefile,
on_delete=models.CASCADE,
related_name="annotation",
blank=False,
null=False,
)
我想要实现的是存储一个具有多个Imagefiles
的Dataset
,并且每个Imagefile
可以具有0或1个相关的Annotation
。
我可以创建属于它的Dataset
和Imagefiles
。但是,当我尝试创建Annotation
时,它没有在Imagefile
中注册。换句话说,Annotation
引用Imagefile
,但Imagefile
看到的是空的Annotation
。
下面是我创建测试用例的方法:
dataset = Dataset.objects.get(uuid=..., name='test_dataset')
new_imagefile = Imagefile.objects.create(
uuid=...,
dataset=dataset,
name='test_image.png'
)
new_imagefile.file.save('/some/existing/path/image.png', open('test_image.png', "rb"))
new_annot = Annotation.objects.create(imagefile=new_imagefile)
new_annot.image.save('/some/other/existing/path/annot.png', open('annot.png', "rb"))
当上面的过程完成后,打印new_imagefile.annotation
会得到dataset.Annotation.None
,我已经为此奋斗了几个小时,任何提示都是值得的。
1条答案
按热度按时间fwzugrvs1#
哇,我在发布问题后就发现了这个问题--在
Annotation
的定义中,我应该使用OneToOneField
而不是ForeignKey
。这解决了我的问题。我希望这能帮助其他有同样问题的人。