2016-12-13 1 views
2

Erstes Posten, ein bisschen ein komisches Problem mit Djangos Admin TabularInline habend. Bei Suchanfragen scheint das Problem nicht zu bestehen.Django Admin Inline, die leere Extrainstanzen zurückgibt

Wenn ich einen Mehrwert - in diesem Fall eine Finanz Quote - und den Eintrag speichern, wird die Seite aktualisieren Sie die Instanz und weitere 2 Einträge hinzugefügt, die in jedem Feld leer Werte haben.

Das gleiche passiert, wenn ich sich zum Löschen aus der Admin-Seite markieren. Es löscht alle Einträge und fügt dann 3 weitere anstelle der vorherigen hinzu.

Das gleiche geschieht mit dem Rechnungsmodell (das ein ähnliches Modell ist), aber nicht mit den Kauf-Modellen, die wie erwartet verhalten. Das bringt mich dazu zu denken, dass ich etwas seltsam gemacht habe, als ich die Modelle geschrieben habe.

Bild im Anhang, um das Ergebnis zu zeigen.

Hoffentlich jemand kann sehen, wo ich

Dank falsch gegangen sind!

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

Antwort

3

In Ihrer Inline-Klassen gesetzt extra=0. Ich nehme an, Sie haben dieses Problem, weil Sie Felder mit Standardwerten und keine erforderlichen Felder in automatisch erstellten Instanzen haben, also versehentlich speichern, und Django hat keine Fehler ausgelöst.

+0

Das hat funktioniert, danke! Obwohl ich am Ende die Standardwerte änderte, so dass mindestens eines der Felder erforderlich war (was wahrscheinlich eine weniger hacky Lösung ist) –

Verwandte Themen