Django将类对象的值导入同一模型中的另一个类

时间:2019-08-08 10:57:32

标签: django django-models

我是DJANGO的新手,但是我的模型遇到了问题。我做了很多尝试,但找不到找到结果的方法。

class Destination(models.Model):

    name = models.CharField(max_length=100)
    img = models.ImageField(upload_to='pics')
    desc = models.TextField()
    price = models.IntegerField()
    offer = models.BooleanField(default = False)

在上述Model类中,我希望在下面Model类中具有相同的'name'字段值

class Destination_individual(models.Model):

    # name = models.CharField(max_length=100, default = None)
    name = 
    img = models.ImageField(upload_to='pics_indiavidual')
    caption = models.CharField(max_length=100)
    img2 = models.ImageField(upload_to='pics_indiavidual')
    caption2 = models.CharField(max_length=100)
    img3 = models.ImageField(upload_to='pics_indiavidual')
    caption3 = models.CharField(max_length=100)
    img4 = models.ImageField(upload_to='pics_indiavidual')
    caption4 = models.CharField(max_length=100)
    img5 = models.ImageField(upload_to='pics_indiavidual')
    caption5 = models.CharField(max_length=100)

我的第一个类(目标)已迁移到服务器,并且我希望该数据库(目标)中的“名称”字段值显示在Destination_individual数据库的“名称”字段中。

请指导我该怎么做。

非常感谢。

2 个答案:

答案 0 :(得分:0)

不确定您似乎已经裁剪的第一个模型是什么,但是可以说它叫做Person。

您应该拥有

而不是其他名称
person = models.ForeignKey(Person, on_delete=models.CASCADE)

然后您可以使用

引用Destination_individual的名称
person.name

P.S。根据Django命名标准,您的类实际上应命名为DestinationIndividual。没什么大不了,但仍然如此。

答案 1 :(得分:0)

只有在目的地名称为唯一时,这才在概念上可行,因为否则该名称可能引用多个Destination

因此,我们可以将该字段设置为唯一字段,例如:

class Destination(models.Model):
    name = models.CharField(max_length=100, unique=True)
    img = models.ImageField(upload_to='pics')
    desc = models.TextField()
    price = models.IntegerField()
    offer = models.BooleanField(default = False)

然后,我们可以通过设置ForeignKey field [Django-doc]来定义引用name的{​​{1}}字段的to_field=... parameter [Django-doc],例如:

Destination

Django将在数据库中创建一个class Destination_individual(models.Model): name = ForeignKey(Destination, to_field='name', on_delete=models.CASCADE) img = models.ImageField(upload_to='pics_indiavidual') caption = models.CharField(max_length=100) img2 = models.ImageField(upload_to='pics_indiavidual') caption2 = models.CharField(max_length=100) img3 = models.ImageField(upload_to='pics_indiavidual') caption3 = models.CharField(max_length=100) img4 = models.ImageField(upload_to='pics_indiavidual') caption4 = models.CharField(max_length=100) img5 = models.ImageField(upload_to='pics_indiavidual') caption5 = models.CharField(max_length=100)列,该列存储name_id对象的名称。它将创建外键约束,以便大多数数据库将验证Destination引用的是name_id记录中的有效name

话虽这么说,通常最好让Destination引用模型的主键(ForeignKey)。这样,您就可以使用AutoField,并且可以使您的模型更加统一