2010-01-12 4 views
0
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 

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

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

+0

Что вы подразумеваете под «двумя внешними ключами, которые связаны друг с другом»? Что эти два внешних ключа всегда указывают на один и тот же объект? Или как именно взаимосвязь между этими двумя внешними ключами? – Haes

+0

Возможный дубликат [Как я могу получить два внешних ключа к одной и той же модели в Django?] (Http://stackoverflow.com/questions/543377/how-can-i-have-two-foreign-keys-to-the -same-model-in-django) –

ответ

3

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

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

related_name приходит от Джанго Документов

ForeignKey.related_name

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

См. related objects documentation для получения полного объяснения и примера.

1

Сделать 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) 

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

0

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

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

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

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

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

    Я бы добавить еще одну модель для кодов, таких как:

    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 
    
+0

У каждого продукта есть уникальный код, но вещь, которую я пыталась сделать, заключалась в том, чтобы он автоматически добавлял номер кода после выбора названия продукта.Также пытаемся выяснить, как сделать поля видимыми, но неотредактированными и как преформировать математические функции между 2-мя полями, такими как avail-commited = reorder. огромное спасибо – Jon

Смежные вопросы