Django - 编辑多对多内联

时间:2017-06-16 08:41:23

标签: django

我有以下模型

class Day(models.Model):
    date = models.DateField(auto_now=False, auto_now_add=False)
    price = models.FloatField()
    payment_method = models.CharField(max_length = 200, blank=True)
    payment_date = models.CharField(max_length=200, blank=True)
    room = models.ForeignKey(Room, null=True, blank=True, verbose_name='Номер', on_delete=models.CASCADE)

    def __unicode__(self):
        return str(self.date)

class Reservation(models.Model):
    start = models.DateField(verbose_name='Заезд', auto_now=False, auto_now_add=False, blank=False)
    end = models.DateField(verbose_name='Выезд', auto_now=False, auto_now_add=False, blank=False)
    check_in_time = models.TimeField(verbose_name='Время заезда', blank=False)
    check_out_time = models.TimeField(verbose_name='Время выезда', blank=False)
    has_refund = models.BooleanField(verbose_name='Возвратная бронь', default=True)
    payed = models.BooleanField(verbose_name='Оплачено', default=False)
    reserved_days = models.ManyToManyField(Day, blank=False)
    additional_services = models.ManyToManyField(AdditionalService)
    guest_name = models.CharField(verbose_name='Имя гостя', max_length=200, blank=True)
    reservation_number = models.CharField(verbose_name='Номер брони', max_length=200, blank=True)

我想要的是能够在Day页面上编辑Reservation

我在django docs中尝试以下内容

class ReservedDaysInline(admin.TabularInline):
    model = Reservation
    extra = 1

class ReservationAdmin(admin.ModelAdmin):
    inlines = (ReservedDaysInline,)

class DayAdmin(admin.ModelAdmin):
    inline = (ReservedDaysInline,)


admin.site.register(Reservation, ReservationAdmin)
admin.site.register(Day, DayAdmin)

但它不起作用。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

doc

尝试此操作
class ReservedDaysInline(admin.TabularInline):
    model = Reservation.reserved_days.through
    extra = 1

class ReservationAdmin(admin.ModelAdmin):
    inlines = (ReservedDaysInline,)
    exclude = ('reserved_days',)