создание 2 внешних ключей, которые связаны друг с другом - PullRequest
0 голосов
/ 12 января 2010
class Product(models.Model):  

    name = models.CharField(max_length = 127)   
    description = models.TextField()   
    code = models.CharField(max_length = 127)

    def __unicode__(self):
        return self.name


class ProductLot(models.Model):

    product = models.ForeignKey(Product)
    code = models.ForeignKey(Product)
    lot_no = models.CharField(max_length = 30)
    location = models.CharField(max_length = 127)
    incoming = models.IntegerField()
    commited = models.IntegerField()
    available = models.IntegerField()
    reorder = models.IntegerField()
    created_date = models.DateField(auto_now_add=True)

    def __unicode__(self):
        return self.product.name + " - " + self.lot_no

Я хочу, чтобы код соотносился с внешним ключом продукта, поэтому то, что вы вводите для кода, соответствует продукту.


ОК. Я пытаюсь получить выпадающий список для кодов, которые соответствуют продукту. Например, когда в Django я использую ForeignKey для выпадающего списка, который использует продукты в базе данных, но у них также есть соответствующий кодовый номер, который не отображается в поле кода как выпадающий список. Я думал, встроенный код класса? Извините, я новичок в этом

Ответы [ 3 ]

3 голосов
/ 12 января 2010

если у вас есть две модели FK для одной модели, вам нужно дать разные связанные имена:

product = models.ForeignKey(Product, related_name='lot_product')
code = models.ForeignKey(Product, related_name='lot_code')

related_name происходит от django docs:

ForeignKey.related_name

Имя, которое нужно использовать для отношения от связанного объекта к этому.

См. документацию по связанным объектам для полного объяснения и примера.

1 голос
/ 12 января 2010

Сделать code свойством, которое выглядит как product:

def getCode(self):
  return self.product and self.product.code

def setCode(self, value):
  if self.product:
    self.product.code = value
    self.product.save()

code = property(getCode, setCode)

Вы не сможете использовать его в запросе, но для этого и нужен код продукта__.

0 голосов
/ 12 января 2010

Я думаю, вы должны пересмотреть свои модели. Прямо сейчас каждый экземпляр ProductLot указывает ровно на два продукта. Я не уверен, что это то, что вы хотите.

Это действительно зависит от того, какова связь между кодом и продуктом. Некоторые мысли:

  1. Каждый Product имеет уникальный code (соотношение 1: 1):

    Просто опустите второй ключ ForeignKey с именем code в модели ProductLot.

  2. Каждый Product может иметь несколько разных кодов, но каждый code указывает только на одно Product (отношение 1: n):

    Я бы добавил другую модель для ваших кодов, например:

    class Product(models.Model):
        name = models.CharField(max_length = 127)
        ...
    
    class ProductCode(models.Model):
        product = models.ForeignKey(Product)
        ...
    
    class ProductLot(models.Model):
        product_code = models.ForeignKey(ProductCode)
        ...
        def correspondingProductName(self):
            return self.product_code.product.name
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...