在模型中定义属性,就像Django中其他模型的对象一样

在模型中定义属性,就像Django中其他模型的对象一样,django,django-models,Django,Django Models,是否可以像Django中其他数据模型的对象一样在数据模型中定义属性? 这里是风景区: models.py class Inmueble(models.Model): calle = models.CharField(max_length=20, verbose_name="Calle") numero = models.CharField(max_length=6, verbose_name="Numero") piso = models.IntegerField(ver

是否可以像Django中其他数据模型的对象一样在数据模型中定义属性? 这里是风景区:

models.py

class Inmueble(models.Model):
    calle = models.CharField(max_length=20, verbose_name="Calle")
    numero = models.CharField(max_length=6, verbose_name="Numero")
    piso = models.IntegerField(verbose_name="Piso", blank=True, null=True)
    galeria_id = models.OneToOneField(Galeria, verbose_name="Galería del Inmueble")


class Galeria(Gallery):
    nombre = models.CharField(max_length=30, verbose_name="Nombre")
要点是:每次创建Inmueble对象时,我都需要自动创建一个新的Galeria对象。提前谢谢

                                 Analía.
也许吧 这就是答案。

也许吧
这就是答案。

有两种方法可以解决这个问题:

  • 覆盖Inmueble模型的
    save()
    方法
  • 在Galeria上创建一个接收Inmueble发出的信号的信号处理程序
  • 这两种方法都可以工作,并且都是可以接受的,但是我建议使用信号,原因如下:

    • 这是一个有点去耦合。如果以后更改或删除Galeria,代码不会中断
    • postsave的信号处理程序包含一个布尔值,用于指示是否正在创建模型。从技术上讲,您可以通过检查模型是否设置了.id来实现model save()中的相同功能,但在我看来,该信号是一个更干净的解决方案
    下面是这两个的代码的想法

    使用信号(推荐) 重写模型save()方法
    有两种方法可以处理此问题:

  • 覆盖Inmueble模型的
    save()
    方法
  • 在Galeria上创建一个接收Inmueble发出的信号的信号处理程序
  • 这两种方法都可以工作,并且都是可以接受的,但是我建议使用信号,原因如下:

    • 这是一个有点去耦合。如果以后更改或删除Galeria,代码不会中断
    • postsave的信号处理程序包含一个布尔值,用于指示是否正在创建模型。从技术上讲,您可以通过检查模型是否设置了.id来实现model save()中的相同功能,但在我看来,该信号是一个更干净的解决方案
    下面是这两个的代码的想法

    使用信号(推荐) 重写模型save()方法 最后,我做到了:

    from django.db.models.signals import post_save
    
    class Galeria(Gallery):
    
      inmueble_id = models.ForeignKey(Inmueble)
    
      def inmueble_postsave(sender, instance, created, **kwargs):
        if created:
            instance = Galeria.objects.create(inmueble_id=instance,     title=instance.calle+' '+instance.numero, title_slug=instance.calle+' '+instance.numero)     
            instance.save()
    
      post_save.connect(inmueble_postsave, sender=Inmueble,  dispatch_uid='galeria.inmueble_postsave')
    
    最后,我做到了:

    from django.db.models.signals import post_save
    
    class Galeria(Gallery):
    
      inmueble_id = models.ForeignKey(Inmueble)
    
      def inmueble_postsave(sender, instance, created, **kwargs):
        if created:
            instance = Galeria.objects.create(inmueble_id=instance,     title=instance.calle+' '+instance.numero, title_slug=instance.calle+' '+instance.numero)     
            instance.save()
    
      post_save.connect(inmueble_postsave, sender=Inmueble,  dispatch_uid='galeria.inmueble_postsave')
    
    from django.db.models.signals import post_save
    
    class Galeria(Gallery):
    
      inmueble_id = models.ForeignKey(Inmueble)
    
      def inmueble_postsave(sender, instance, created, **kwargs):
        if created:
            instance = Galeria.objects.create(inmueble_id=instance,     title=instance.calle+' '+instance.numero, title_slug=instance.calle+' '+instance.numero)     
            instance.save()
    
      post_save.connect(inmueble_postsave, sender=Inmueble,  dispatch_uid='galeria.inmueble_postsave')