Найти - Пользователи
Полная версия: Нуждаюсь в совете, как доделать корзину в админке
Начало » Django » Нуждаюсь в совете, как доделать корзину в админке
1 2
Saturn
В таблицу (корзины) добавляются данные с 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.
adw0rd
Обычно делают так:
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 можно еще хранить скидку на позицию, фиксированную цену на момент продажи и т.п.
adw0rd
Saturn
Проблема в том, что в модели Product содержатся поля (category, price, …)
Как можно эти поля (category, price) отобразить в модели Basket.

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

Только непонятно зачем это вам?
adw0rd
То есть в результате должно добавляться id (модели Product) в корзину, а в админке отображаться все поля надлежащие этому id.
Для оборажения вложенных структур в админке смотрите https://docs.djangoproject.com/en/dev/ref/contrib/admin/#inlinemodeladmin-objects
fata1ex
Saturn
Как можно эти поля (category, price) отобразить в модели Basket.
Это бессмысленно, если вы связываете модели отношением, то они и так имеют доступ к полям друг друга.

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


adw0rd, как насчет кнопки “Редактировать”?
FishHook
может просто у Product определить __unicode__() ?
adw0rd
fata1ex
adw0rd, как насчет кнопки “Редактировать”?
Как по мне, так это были разные законченные посты. Вообще я против любого редактирования диалога, лучше сделать склейку постов, а не просить редактировать их.
Saturn
Спасибо, что помогаете, но я если честно так и понял как можно отобразить в этой форме администратора
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 ?
FishHook
class Product(models.Model):
    name=....
    articul=...
    def __unicode__(self):
       return "Название:%s, артикул: %s" %(self.name, self.articul)
Или сам догадайся как в цикле по полям пройтись
adw0rd
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
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