Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Проблема с таблицами с внешним ключом [RSS Feed]

#1 Янв. 27, 2014 13:53:41

Hed1n
Зарегистрирован: 2014-01-27
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с таблицами с внешним ключом

Доброго времени суток!
Возникла следующая проблема: на диплом делаю сайт, некоторые таблицы связаны друг с другом с помощью ForeignKey. При попытке добавить через админку запись в таблицу с полем ForeignKey вылетает ошибка.

AttributeError at /admin/baseapp/linses/add/
type object ‘Product’ has no attribute ‘product_name’
Request Method: POST
Request URL: http://127.0.0.1:8000/admin/baseapp/linses/add/
Django Version: 1.5.1
Exception Type: AttributeError
Exception Value:
type object ‘Product’ has no attribute ‘product_name’

вот пример двух связанных моделей. Они создавались автоматически по существующей базе данных (Postgre). Подскажите пожалуйста, что я упустил и что тут неправильно. Заранее спасибо.

class Product(models.Model):
    pk_product_id = models.AutoField(primary_key=True, unique=True, db_column='PK_PRODUCT_ID') # Field name made lowercase.
    product_name = models.CharField(db_column='PRODUCT_NAME', max_length=60, blank=True, verbose_name='наименование продукта') # Field name made lowercase.
    articul = models.CharField(db_column='ARTICUL', max_length=30, blank=True, verbose_name='артикул') # Field name made lowercase.
    category = models.CharField(db_column='CATEGORY', max_length=30, blank=True, verbose_name='категория') # Field name made lowercase.
    price = models.TextField(db_column='PRICE', verbose_name='цена') # Field name made lowercase. This field type is a guess.
    price_2 = models.TextField(db_column='PRICE_2', blank=True) # Field name made lowercase. This field type is a guess.
    price_3 = models.TextField(db_column='PRICE_3', blank=True) # Field name made lowercase. This field type is a guess.
    shop = models.CharField(db_column='SHOP', max_length=30, blank=True, verbose_name='магазин') # Field name made lowercase.
    balance = models.SmallIntegerField(null=True, db_column='BALANCE', blank=True, verbose_name='количество') # Field name made lowercase.
    prod_discount = models.SmallIntegerField(null=True, db_column='PROD_DISCOUNT', blank=True, verbose_name='скидка, %') # Field name made lowercase.
    comment = models.TextField(db_column='COMMENT', blank=True, verbose_name='описание/комментарий') # Field name made lowercase.
    price_4 = models.TextField(db_column='PRICE_4', blank=True) # Field name made lowercase. This field type is a guess.
    class Meta:
        db_table = 'PRODUCT'
    def __str__(self):
        return self.product_name
class Linses(models.Model):
    fk_product = models.ForeignKey('Product', unique=True, db_column='FK_PRODUCT_ID') # Field name made lowercase.
    manufacturer = models.CharField(db_column='MANUFACTURER', max_length=50, blank=True, verbose_name='Приозводитель') # Field name made lowercase.
    brand = models.CharField(db_column='BRAND', max_length=50, blank=True, verbose_name='брэнд') # Field name made lowercase.
    replacment_time = models.CharField(db_column='REPLACMENT_TIME', max_length=20, blank=True, verbose_name='время замены') # Field name made lowercase.
    colored = models.BooleanField(null=False, db_column='COLORED', blank=False, verbose_name='цветные?') # Field name made lowercase.
    color = models.CharField(db_column='COLOR', max_length=15, blank=True, verbose_name='цвет') # Field name made lowercase.
    optical_power = models.FloatField(null=True, db_column='OPTICAL_POWER', blank=True, verbose_name='оптическая сила') # Field name made lowercase.
    radius_of_cutvature = models.FloatField(null=True, db_column='RADIUS_OF_CUTVATURE', blank=True, verbose_name='радиус кривизны') # Field name made lowercase.
    type = models.CharField(db_column='TYPE', max_length=20, blank=True, verbose_name='тип') # Field name made lowercase.
    optical_power_cylinder = models.FloatField(null=True, db_column='OPTICAL_POWER_CYLINDER', blank=True, verbose_name='оптическая сила цилиндра') # Field name made lowercase.
    axis = models.SmallIntegerField(null=True, db_column='AXIS', blank=True, verbose_name='ось') # Field name made lowercase.
    id = models.AutoField(primary_key=True)
    moistire_content = models.SmallIntegerField(null=True, db_column='MOISTIRE_CONTENT', blank=True, verbose_name='влазгосодержание, %') # Field name made lowercase.
    diameter = models.FloatField(null=True, db_column='DIAMETER', blank=True, verbose_name='диаметр, мм') # Field name made lowercase.
    dcl = models.FloatField(null=True, db_column='DCL', blank=True, verbose_name='ДКЛ') # Field name made lowercase.
    indicator_inversion = models.BooleanField(db_column='INDICATOR_INVERSION', verbose_name='индикатор инверсии') # Field name made lowercase.
    material = models.CharField(db_column='MATERIAL', max_length=20, blank=True, verbose_name='материал') # Field name made lowercase.
    mode_of_wearing = models.CharField(max_length=100, blank=True, verbose_name='режим ношения')
    country_of_origin = models.CharField(max_length=50, blank=True, verbose_name='страна производитель')
    packing = models.CharField(max_length=30, blank=True, verbose_name='упаковка')
    uv_filter = models.BooleanField(db_column='UV_filter', verbose_name='УФ фильтр') # Field name made lowercase.
    design = models.CharField(max_length=30, blank=True, verbose_name='дизайн')
    class Meta:
        db_table = 'LINSES'
    def __str__(self):
        return u' %s %s' (Product.product_name, self.brand)

Отредактировано Hed1n (Янв. 27, 2014 13:54:10)

Офлайн

#2 Янв. 27, 2014 21:31:09

kise97
Зарегистрирован: 2012-05-31
Сообщения: 83
Репутация: +  4  -
Профиль  

Проблема с таблицами с внешним ключом

Возможно глупость, но стоит вот так сделать

fk_product = models.ForeignKey(Product, unique=True, db_column='FK_PRODUCT_ID') # Field name made lowercase.

Сам я джангу знаю не особо, но думаю, что

return u' %s %s' (Product.product_name, self.brand)

Не произведет нужного фурора, потому что вы пытаетесь получить product name без параметров… Нужно это делать иным способом например, обратиться при помощи языка запросов django..


извините, если бред написал, не особо еще в django разбираюсь

Офлайн

#3 Янв. 28, 2014 04:27:42

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Проблема с таблицами с внешним ключом

def __unicode__(self):
    return u' %s %s' (self.fk_produc.product_name, self.brand)



Отредактировано FishHook (Янв. 28, 2014 04:28:13)

Офлайн

#4 Янв. 28, 2014 04:31:43

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Проблема с таблицами с внешним ключом

Hed1n
на диплом делаю сайт
пичаль(

Офлайн

  • Начало
  • » Django
  • » Проблема с таблицами с внешним ключом [RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version