如何将自动场从一种模型引用到另一种模型

时间:2019-08-08 14:02:25

标签: django-models

我需要一些有关将Autofield引用到另一个模型中的信息。

  1. 我尝试制作外键,但是不确定语法是否正确
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

1 个答案:

答案 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模型的作者。