我有以下型号:
class Event(models.Model):
name = models.CharField(max_length=128)
class Order(models.Model):
requester = models.CharField(max_length=128)
taker = models.CharField(max_length=128)
email = models. EmailField()
phone = models.CharField(max_length=13)
class Picture(models.Model):
event = models.ForeignKey(Event, related_name="pictures")
image = models.ImageField(upload_to='media')
show_name = models.CharField(max_length=128, blank=True, null=True)
file_name = models.CharField(max_length=128, blank=True, null=True)
class OrderItem(models.Model):
order = models.ForeignKey(Order)
picture = models.ForeignKey(Picture)
amount = models.PositiveSmallIntegerField()
我需要获得属于某个事件的所有照片。像这样:
Event 1:
Pic 1, Pic 2
Event 2:
Pic 3, Pic 4
Order 1:
Pic 1
Order 2:
Pic 3
我需要什么:
Event 1 has Pic 1 in an Order, so it can't be deleted
Event 2 has Pic 3 in an Order, so it can't be deleted
Pic 2 in Event 1 can be deleted
Pic 4 in Event 2 can be deleted
我想知道这个,因为我正在使用内联表单集,并且我想仅在图片不属于订单时才显示“删除”复选框。在上面的示例中,我希望“删除”复选框仅出现在图2中。我可以在模板中使用if
语句实现该功能,但我需要视图逻辑。
任何帮助将不胜感激。感谢。
答案 0 :(得分:2)
由于您从Picture到Event明确拥有外键,因此这应该像event.picture_set.all()
一样简单。
修改强>
要排除OrderItem中显示的项目,您可以执行以下操作:
event.pictures.filter(orderitem=None)