У меня следующие модели:
class OrderItem(models.Model):
item = models.ForeignKey(FoodDish,
on_delete=models.CASCADE,
blank=True,
null=True)
quantity = models.IntegerField(default=1)
user = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.CASCADE)
ordered = models.BooleanField(default=False)
def __str__(self):
return f"{self.quantity} of {self.item.name}"
def get_total_item_price(self):
return self.quantity * self.item.price
class Order(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.CASCADE)
items = models.ManyToManyField(OrderItem)
start_date = models.DateTimeField(auto_now_add=True)
order_date = models.DateTimeField(blank=True, null=True)
ordered = models.BooleanField(default=False)
total_price = models.FloatField(blank=True, default=0.0)
def __str__(self):
return f"{self.user.username} ordered on {self.order_date}"
На странице администрирования я хочу видеть элементы, относящиеся к определенному заказу. Однако при входе на страницу для определенного порядка поле, содержащее ManyToManyField, отображает все элементы OrderItems в базе данных (с выделенными записями, относящимися к текущему порядку).
Почему поле данных в администрации страница отображает все эти записи? Когда я добавляю новый OrderItem в базу данных, он также появляется в ManyToManyField, даже если не должно быть ссылки на существующую запись заказа.
Затем, можно ли сделать выбор перед обслуживанием страницы администратора, поэтому я может получить только те экземпляры OrderItem, которые связаны с текущим Order?
Edit 1: В admin.py у меня есть следующий код:
from django.contrib import admin
from .models import Order, OrderItem
class OrderAdmin(admin.ModelAdmin):
fieldsets = [
("Date", {"fields": ["order_date"]}),
("Items", {"fields": ["items"]}),
("Details", {"fields":["ordered", "total_price"]}),
]
# Register your models here.
admin.site.register(Order, OrderAdmin)
admin.site.register(OrderItem)