2016-12-13 2 views
2

Публикация в первый раз, имеющая немного странную проблему с администратором Django Admin TabularInline. Кажется, не удалось найти проблему в любых поисках.Django Admin Inline возвращает пустые дополнительные экземпляры

Когда я добавляю значение - в этом случае Финансовую цитату - и сохранит запись, страница обновится, добавив экземпляр и дополнительные 2 записи, которые имеют пустые значения в каждом поле.

То же самое происходит, если я укажу их для удаления с страницы администрирования. Он удаляет все записи, а затем добавляет еще 3 вместо прежних.

То же самое происходит с моделью счета-фактуры (аналогичная модель), но не с моделями покупки, которые ведут себя так, как ожидалось. Это заставляет меня думать, что я сделал что-то странное, когда я написал модели.

Изображение прилагается, чтобы показать результат.

Надеюсь кто-то может увидеть, где я пошло не так

Спасибо!

models.py

class Quote(models.Model): 
     job = models.ForeignKey(Job, related_name="quotes", on_delete=models.CASCADE) 
     number = models.AutoField(primary_key=True) 
     currency = models.ForeignKey(Currency, blank=True, null=True) 
     amount = models.DecimalField(max_digits=20, decimal_places=2, default="0.00", verbose_name="Amount Invoiced") 
     created = models.DateTimeField(auto_now=False, auto_now_add=True) 
     created_by = models.ForeignKey(Profile, related_name='quoted', blank=True, null=True, on_delete=models.SET_NULL) 
     sent = models.BooleanField(default=False) 
     superceded = models.BooleanField(default=False) 
     tax = models.DecimalField(max_digits=20,decimal_places=2,default=20.00, verbose_name="Tax Rate") 

     def __unicode__(self): 
       return self.created.strftime("%B %d, %Y") + " | " + u'%s' % (self.currency) + str(self.amount) 
     def readable_date(self): 
       return self.created.strftime("%B %d, %Y") 

    class Invoice(models.Model): 
     job = models.ForeignKey(Job, related_name="invoices", blank=True, null=True, on_delete=models.SET_NULL) 
     number = models.AutoField(primary_key=True) 
     currency = models.ForeignKey(Currency, blank=True, null=True) 
     amount = models.DecimalField(max_digits=20, decimal_places=2, default="0.00", verbose_name="Amount Invoiced") 
     created = models.DateTimeField(auto_now=False, auto_now_add=True) 
     created_by = models.ForeignKey('profiles.Profile', related_name='invoiced', blank=True, null=True, on_delete=models.SET_NULL) 
     paid = models.BooleanField(default=False) 
     sent = models.BooleanField(default=False) 
     superceded = models.BooleanField(default=False) 
     tax = models.DecimalField(max_digits=20,decimal_places=2,default=20.00, verbose_name="Tax Rate") 

     def __unicode__(self): 
      return self.created.strftime("%B %d, %Y") + " | " + u'%s' % (self.currency) + str(self.amount) 
     def readable_date(self): 
      return self.created.strftime("%B %d, %Y") 
     def get_day(self): 
      return self.created.strftime("%d") 
     def get_month(self): 
      return self.created.strftime("%b") 

admin.py

from finance.models import Purchase, Quote, Invoice 
from django.contrib import admin 

from .models import Job 

class QuoteInline(admin.TabularInline): 
    model = Quote 
class InvoiceInline(admin.TabularInline): 
    model = Invoice 
class PurchaseInline(admin.TabularInline): 
    model = Purchase 
class JobModelAdmin(admin.ModelAdmin): 

     list_display = [ 
     'job_number', 
     'brand', 
     'job_name', 
     'client', 
     'account_manager', 
     'last_updated_by', 
     'updated', 
     'status', 
     ] 

     list_display_links = ['job_name'] 
     list_filter = ['client'] 

     inlines = [ 
      QuoteInline, 
      PurchaseInline, 
      InvoiceInline 
     ] 

Example of issue in admin page

ответ

3

В ваших встроенных классов набор extra=0. Я думаю, у вас есть эта проблема, потому что у вас есть поля со значениями по умолчанию и никаких обязательных полей в автоматически созданных экземплярах, поэтому вы случайно их сохраняете, а django не вызывает никаких ошибок.

+0

Это сработало, спасибо! Хотя, я в конечном итоге изменил значения по умолчанию, вместо этого, чтобы потребовалось хотя бы одно из полей (это, вероятно, менее хакерское решение) –

Смежные вопросы