我需要一些有关将Autofield引用到另一个模型中的信息。
I have a main model class with id as Autofield
class Metadataform(models.Model):
id = models.AutoField(primary_key=True)
Authors_Name = models.CharField(max_length=500, blank=True, null=True)
Then I have a upload class
(I basically want to fetch the same id from the main model into the Meta_id in the uploadmeta model)
class uploadmeta(models.Model):
Meta_id = models.ForeignKey('Metadataform',on_delete=models.CASCADE, null=True)
Authors_Name = models.CharField(max_length=500, blank=True, null=True)
tar_gif = models.FileField(upload_to='mnt/storage/DB-Data/')
def __str__(self):
return self.Meta_id
答案 0 :(得分:0)
您的方法确实是正确的,尽管您不需要自己添加主键。 Django做到了。此外,您的代码并没有真正遵循命名约定。
您可以将其实现为:
class MetadataForm(models.Model):
author_name = models.CharField(max_length=500, blank=True, null=True)
class UploadMeta(models.Model):
metadata_form = models.ForeignKey('MetadataForm', on_delete=models.CASCADE, null=True)
tar_gif = models.FileField(upload_to='mnt/storage/DB-Data/')
此外,设置blank=True
可能没有多大意义。这意味着默认情况下该字段不会以表格形式显示。也不需要null=True
,因为这意味着您可以在该字段中添加None
(在数据库NULL
中)。
模型的__str__
通常包括该模型的某些字段值。由于仅使用来自ForeignKey
关系的值,就意味着两个或更多具有不同值的UploadMeta
,如果它们引用相同的MetaDataForm
,则具有相同的文本表示形式?
我不太清楚为什么还要在Authors_Name
中定义一个名为UploadMeta
的字段。如果与metadata_form
的{{1}}相同,则最好不要添加多余的内容,因为这会创建数据重复。
也许最好也建立一个author_name
模型,并让Author
通过MetadataForm
来引用该ForeignKey
模型的作者。