Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Нуждаюсь в совете, как доделать корзину в админке [RSS Feed]

#1 Авг. 29, 2012 12:00:26

Saturn
От:
Зарегистрирован: 2012-03-22
Сообщения: 164
Репутация: +  0  -
Профиль   Отправить e-mail  

Нуждаюсь в совете, как доделать корзину в админке

В таблицу (корзины) добавляются данные с request.session и с формы (phone, email, town…)
Вот модель корзины:

class Basket(models.Model):
    product = models.ForeignKey(Product, verbose_name="Товар")
    username = models.CharField(max_length=50, verbose_name="Имя")
    phone = models.CharField(max_length=50, verbose_name="Телефон")
    email = models.EmailField(blank=True)
    town = models.CharField(max_length=50, verbose_name="Город")
    street = models.CharField(max_length=50, verbose_name="Улица")
    house = models.CharField(max_length=50, verbose_name="Дом")
    room = models.CharField(max_length=50, blank=True, verbose_name="Квартира")
    quantity = models.IntegerField(max_length=50, verbose_name="Количество")

Проблема в том, что в модели Product содержатся поля (category, price, …)
Как можно эти поля (category, price) отобразить в модели Basket.
То есть в результате должно добавляться id (модели Product) в корзину, а в админке отображаться все поля надлежащие этому id.



Отредактировано Saturn (Авг. 29, 2012 12:27:37)

Офлайн

#2 Авг. 29, 2012 12:49:33

adw0rd
От: Санкт-Петербург
Зарегистрирован: 2012-07-28
Сообщения: 107
Репутация: +  8  -
Профиль   Отправить e-mail  

Нуждаюсь в совете, как доделать корзину в админке

Обычно делают так:

class Product(models.Model):
    ...
class Basket(models.Model):
    ...
class BasketItem(models.Model):
    product = models.ForeignKey(Product, verbose_name="Товар")
    basket = models.ForeignKey(Basket)

И Basket называют Order, но не суть…
В BasketItem можно еще хранить скидку на позицию, фиксированную цену на момент продажи и т.п.




Python, Django, Flask, Git, Emacs, Nginx, MySQL, SphinxSearch, Redis, Linux, FreeBSD
Мой блог, я на GitHub

Отредактировано adw0rd (Авг. 29, 2012 12:49:47)

Офлайн

#3 Авг. 29, 2012 12:52:56

adw0rd
От: Санкт-Петербург
Зарегистрирован: 2012-07-28
Сообщения: 107
Репутация: +  8  -
Профиль   Отправить e-mail  

Нуждаюсь в совете, как доделать корзину в админке

Saturn
Проблема в том, что в модели Product содержатся поля (category, price, …)
Как можно эти поля (category, price) отобразить в модели Basket.

Можно через метод, что-то типа:
@property
def product_categories(self):
    return self.product.categories.all()
# для price тоже самое

Только непонятно зачем это вам?




Python, Django, Flask, Git, Emacs, Nginx, MySQL, SphinxSearch, Redis, Linux, FreeBSD
Мой блог, я на GitHub

Офлайн

#4 Авг. 29, 2012 12:55:12

adw0rd
От: Санкт-Петербург
Зарегистрирован: 2012-07-28
Сообщения: 107
Репутация: +  8  -
Профиль   Отправить e-mail  

Нуждаюсь в совете, как доделать корзину в админке

То есть в результате должно добавляться id (модели Product) в корзину, а в админке отображаться все поля надлежащие этому id.
Для оборажения вложенных структур в админке смотрите https://docs.djangoproject.com/en/dev/ref/contrib/admin/#inlinemodeladmin-objects




Python, Django, Flask, Git, Emacs, Nginx, MySQL, SphinxSearch, Redis, Linux, FreeBSD
Мой блог, я на GitHub

Отредактировано adw0rd (Авг. 29, 2012 12:55:30)

Офлайн

#5 Авг. 29, 2012 13:25:15

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Нуждаюсь в совете, как доделать корзину в админке

Saturn
Как можно эти поля (category, price) отобразить в модели Basket.
Это бессмысленно, если вы связываете модели отношением, то они и так имеют доступ к полям друг друга.

Saturn
То есть в результате должно добавляться id (модели Product) в корзину, а в админке отображаться все поля надлежащие этому id.
Вы можете менять формы админки так же, как и любые другие. Наследуйте и добавляйте поля.
Edit: инлайны в большинстве случаев и правда будут лучше.


adw0rd, как насчет кнопки “Редактировать”?



Отредактировано fata1ex (Авг. 29, 2012 13:48:26)

Офлайн

#6 Авг. 29, 2012 13:46:08

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

Нуждаюсь в совете, как доделать корзину в админке

может просто у Product определить __unicode__() ?



Офлайн

#7 Авг. 29, 2012 14:19:42

adw0rd
От: Санкт-Петербург
Зарегистрирован: 2012-07-28
Сообщения: 107
Репутация: +  8  -
Профиль   Отправить e-mail  

Нуждаюсь в совете, как доделать корзину в админке

fata1ex
adw0rd, как насчет кнопки “Редактировать”?
Как по мне, так это были разные законченные посты. Вообще я против любого редактирования диалога, лучше сделать склейку постов, а не просить редактировать их.




Python, Django, Flask, Git, Emacs, Nginx, MySQL, SphinxSearch, Redis, Linux, FreeBSD
Мой блог, я на GitHub

Офлайн

#8 Авг. 29, 2012 14:43:40

Saturn
От:
Зарегистрирован: 2012-03-22
Сообщения: 164
Репутация: +  0  -
Профиль   Отправить e-mail  

Нуждаюсь в совете, как доделать корзину в админке

Спасибо, что помогаете, но я если честно так и понял как можно отобразить в этой форме администратора

class Order(models.Model):
    product = models.ForeignKey(Product, verbose_name="Товар")
    username = models.CharField(max_length=50, verbose_name="Имя")
    phone = models.CharField(max_length=50, verbose_name="Телефон")
    email = models.EmailField(blank=True)
    town = models.CharField(max_length=50, verbose_name="Город")
    street = models.CharField(max_length=50, verbose_name="Улица")
    house = models.CharField(max_length=50, verbose_name="Дом")
    room = models.CharField(max_length=50, blank=True, verbose_name="Квартира")
    quantity = models.IntegerField(max_length=50, verbose_name="Количество")
    def __unicode__(self):
        return self.product

чтобы были поля с Product ?



Офлайн

#9 Авг. 29, 2012 14:50:23

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

Нуждаюсь в совете, как доделать корзину в админке

class Product(models.Model):
    name=....
    articul=...
    def __unicode__(self):
       return "Название:%s, артикул: %s" %(self.name, self.articul)
Или сам догадайся как в цикле по полям пройтись



Офлайн

#10 Авг. 29, 2012 15:56:43

adw0rd
От: Санкт-Петербург
Зарегистрирован: 2012-07-28
Сообщения: 107
Репутация: +  8  -
Профиль   Отправить e-mail  

Нуждаюсь в совете, как доделать корзину в админке

Saturn
как можно отобразить в этой форме администратора

чтобы были поля с Product ?

В файле “app_name/admin.py” добавь:
from django.contrib import admin
from app_name.models import Product, Order
class ProductInlineAdmin(admin.TabularInline):
    model = Product
class OrderAdmin(admin.ModelAdmin):
    inlines = [ProductInlineAdmin, ]
    ...
admin.site.register(Order, OrderAdmin)

http://djbook.ru/rel1.4/ref/contrib/admin/index.html#inlinemodeladmin-objects




Python, Django, Flask, Git, Emacs, Nginx, MySQL, SphinxSearch, Redis, Linux, FreeBSD
Мой блог, я на GitHub

Отредактировано adw0rd (Авг. 29, 2012 15:59:25)

Офлайн

  • Начало
  • » Django
  • » Нуждаюсь в совете, как доделать корзину в админке[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version