python plot - Kann ich in Django ein Administratorfeld erstellen, ohne ein Formular zu erstellen?




beschriftung achsenskalierung (3)

Jedes Mal, wenn ich einen neuen Spieler im Admin-Bereich von Django betrete, erhalte ich die Fehlermeldung "Dieses Feld ist erforderlich.".

Gibt es eine Möglichkeit, ein Feld nicht erforderlich zu machen, ohne ein benutzerdefiniertes Formular erstellen zu müssen? Kann ich dies in models.py oder admin.py tun?

So sieht meine Klasse in models.py aus.

class PlayerStat(models.Model):
    player = models.ForeignKey(Player)

    rushing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Attempts"
        )
    rushing_yards = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Yards"
        )
    rushing_touchdowns = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Touchdowns"
        )
    passing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Passing Attempts"
        )

Vielen Dank


Answers

Verwenden Sie Leerzeichen = True, null = True

class PlayerStat(models.Model):
    player = models.ForeignKey(Player)

    rushing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Attempts",
        blank=True,
        null=True
        )
    rushing_yards = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Yards",
        blank=True,
        null=True
        )
    rushing_touchdowns = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Touchdowns",
        blank=True,
        null=True
        )
    passing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Passing Attempts",
        blank=True,
        null=True
        )

Einfach gesagt

blank=True

in Ihrem Modell, dh:

rushing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Attempts",
        blank=True
        )

timeit Sie einen Blick auf timeit , den Python Profiler und pycallgraph .

Zeit

def test():
    """Stupid test function"""
    lst = []
    for i in range(100):
        lst.append(i)

if __name__ == '__main__':
    import timeit
    print(timeit.timeit("test()", setup="from __main__ import test"))

Im Wesentlichen können Sie den Python-Code als Zeichenfolgenparameter übergeben. Er wird in der angegebenen Anzahl von Malen ausgeführt und gibt die Ausführungszeit aus. Die wichtigen Teile aus den Dokumenten:

timeit.timeit(stmt='pass', setup='pass', timer=<default timer>, number=1000000)

Erstellen Sie eine Timer Instanz mit der angegebenen Anweisung, dem Setup- Code und der Timer- Funktion, und führen Sie ihre Methode " timeit " mit timeit .

... und:

Timer.timeit(number=1000000)

Zeit Nummer Ausführungen der Hauptaussage. Dies führt die Setup-Anweisung einmal aus und gibt dann die Zeit zurück, die benötigt wird, um die Hauptanweisung mehrere Male auszuführen, gemessen in Sekunden als Gleitkommazahl. Das Argument ist die Anzahl der Male durch die Schleife, standardmäßig auf eine Million. Die Hauptanweisung, die Setup-Anweisung und die zu verwendende Zeitgeberfunktion werden an den Konstruktor übergeben.

Hinweis

Standardmäßig timeit die garbage collection während des Timings vorübergehend. Der Vorteil dieses Ansatzes ist, dass unabhängige Zeitabläufe besser vergleichbar sind. Dieser Nachteil besteht darin, dass GC eine wichtige Komponente der Leistung der zu messenden Funktion sein kann. Wenn dies der Fall ist, kann GC als erste Anweisung in der Setup- Zeichenfolge erneut aktiviert werden. Beispielsweise:

timeit.Timer('for i in xrange(10): oct(i)', 'gc.enable()').timeit()

Profilerstellung

Profiling gibt Ihnen eine viel detailliertere Vorstellung von dem, was vor sich geht. Hier ist das "Instant-Beispiel" aus den offiziellen Dokumenten :

import cProfile
import re
cProfile.run('re.compile("foo|bar")')

Was dir geben wird:

      197 function calls (192 primitive calls) in 0.002 seconds

Ordered by: standard name

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     1    0.000    0.000    0.001    0.001 <string>:1(<module>)
     1    0.000    0.000    0.001    0.001 re.py:212(compile)
     1    0.000    0.000    0.001    0.001 re.py:268(_compile)
     1    0.000    0.000    0.000    0.000 sre_compile.py:172(_compile_charset)
     1    0.000    0.000    0.000    0.000 sre_compile.py:201(_optimize_charset)
     4    0.000    0.000    0.000    0.000 sre_compile.py:25(_identityfunction)
   3/1    0.000    0.000    0.000    0.000 sre_compile.py:33(_compile)

Beide Module sollten Ihnen eine Vorstellung davon geben, wo nach Engpässen gesucht werden muss.

Um sich mit der Ausgabe des profile , werfen Sie einen Blick auf diesen Beitrag

pycallgraph

Dieses Modul verwendet graphviz zum Erstellen von Graphen wie folgt:

Sie können leicht erkennen, welche Pfade am häufigsten nach Farbe genutzt werden. Sie können sie entweder mithilfe der pycallgraph-API oder mithilfe eines gepackten Skripts erstellen:

pycallgraph graphviz -- ./mypythonscript.py

Der Overhead ist jedoch ziemlich beträchtlich. Bei bereits lang laufenden Prozessen kann das Erstellen des Diagramms einige Zeit in Anspruch nehmen.





python django django-models django-admin django-forms