代码之家  ›  专栏  ›  技术社区  ›  ha22109

Django ForeignKey问题

  •  0
  • ha22109  · 技术社区  · 16 年前

    class A(models.Model):
        id=models.IntegerField(primary_key=True)
        name=models.CharField(max_length=200)
        store_id=models.IntegerField()
        type=models.ForeignKey(B)
    
    class B(models.Model):
        id=models.IntegerField(primary_key=True)
        type=models.CharField(max_length=10)
    
     class C(models.Model):
        id=models.IntegerField(primary_key=True)
        store=models.CharField(max_length=200)
    
     class D(models.Model):
       id=models.IntegerField(primary_key=True)
       type=models.CharField(max_length=10)
    

    A type 是B上的ForeignKey,而store\u id是C或D上的逻辑外键,具体取决于 类型

    在我的字段集中,我想显示 store 取决于 类型 经过一些计算。这个 类型 C 或者 D 商店的老板告诉我那张桌子上的那一排 c d 。现在我只想在浏览器上显示值,而不覆盖值。是这可能吗?

    2 回复  |  直到 16 年前
        1
  •  1
  •   Peter Mortensen Pieter Jan Bonestroo    16 年前

    也许你应该看看 Generic Relations

        2
  •  0
  •   Felix Kling    16 年前

    如果我没弄错的话 store_id 总是指向 C type
    如果是这样,您可以在这些模型之间建立正常关系并设置 存储\u id 基于 保存期间的字段:

    class A(models.Model):
        id=models.IntegerField(primary_key=True)
        name=models.CharField(max_length=200)
        store=models.ForeignKey(C)
        type=models.ForeignKey(B)
    
        def save(self,*args, **kwargs):
            if self.type == some_type:
                self.store = get_specific_store_here()
            super(A, self).save(*args, **kwargs)
    

    稍后,您可以通过以下方式访问商店名称:

    # a is an object of model A
    a.store.store
    

    class A(models.Model):
        id=models.IntegerField(primary_key=True)
        name=models.CharField(max_length=200)
        store_id=models.IntegerField()
        type=models.ForeignKey(B)
    
        def get_store_name():
            store = C.objects.get(pk=self.store_id)
            return store.store