Найти - Пользователи
Полная версия: Проблема с таблицами с внешним ключом
Начало » Django » Проблема с таблицами с внешним ключом
1
Hed1n
Доброго времени суток!
Возникла следующая проблема: на диплом делаю сайт, некоторые таблицы связаны друг с другом с помощью 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)
kise97
Возможно глупость, но стоит вот так сделать

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 разбираюсь
FishHook
def __unicode__(self):
    return u' %s %s' (self.fk_produc.product_name, self.brand)
Singularity
Hed1n
на диплом делаю сайт
пичаль(
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB