2016-05-31 3 views
1

Ich habe Probleme bei der dynamischen Generierung von Benutzern für meine Django-App, wo ich die django-tenant-Schemas für die Mandantenfähigkeit verwende.Problem beim Speichern eines dynamischen Modellobjekts in Django (mit Djano-Tenant-Schema)

Es folgt meine Ansichten Snippet:

def RegisterView(request): 
if request.method == 'POST': 
    response_data = {} 
    domain = request.POST.get('domain') 
    schema = request.POST.get('schema') 
    name = request.POST.get('name') 
    description = request.POST.get('description') 

    client=Client() 
    Client.domain_url=domain 
    Client.schema_name=schema 
    Client.name=name 
    Client.description=description 
    Client.save() 

Nun ich das Modell -Client importieren unter einer separaten App Kunden

from customers.models import Client 

Für diesen Multi Tenant-Paket mit, alle Modelle erben die Basis MieterMixin.

Es folgt mein Modell:

class Client(TenantMixin): 
name = models.CharField(max_length=100) 
description = models.TextField(max_length=200) 
created_on = models.DateField(auto_now_add=True) 

Und das ist der TenanMixin Code-Schnipsel mit den Befehlen für die bereite Hilfe:

class TenantMixin(models.Model): 
""" 
All tenant models must inherit this class. 
""" 

auto_drop_schema = False 
""" 
USE THIS WITH CAUTION! 
Set this flag to true on a parent class if you want the schema to be 
automatically deleted if the tenant row gets deleted. 
""" 

auto_create_schema = True 
""" 
Set this flag to false on a parent class if you don't want the schema 
to be automatically created upon save. 
""" 

domain_url = models.CharField(max_length=128, unique=True) 
schema_name = models.CharField(max_length=63, unique=True, 
           validators=[_check_schema_name]) 

class Meta: 
    abstract = True 

def save(self, verbosity=1, *args, **kwargs): 
    is_new = self.pk is None 

    if is_new and connection.schema_name != get_public_schema_name(): 
     raise Exception("Can't create tenant outside the public schema. " 
         "Current schema is %s." % connection.schema_name) 
    elif not is_new and connection.schema_name not in (self.schema_name, get_public_schema_name()): 
     raise Exception("Can't update tenant outside it's own schema or " 
         "the public schema. Current schema is %s." 
         % connection.schema_name) 

    super(TenantMixin, self).save(*args, **kwargs) 

    if is_new and self.auto_create_schema: 
     try: 
      self.create_schema(check_if_exists=True, verbosity=verbosity) 
     except: 
      # We failed creating the tenant, delete what we created and 
      # re-raise the exception 
      self.delete(force_drop=True) 
      raise 
     else: 
      post_schema_sync.send(sender=TenantMixin, tenant=self) 

Nun Fehler Ich erhalte ist:

save() missing 1 required positional argument: 'self' 

Und die Rückverfolgung ist:

Traceback: 

File "/home/sayantan/Desktop/djangowork/my_env/lib/python3.4/site- packages/django/core/handlers/base.py" in get_response 
    149.      response =  self.process_exception_by_middleware(e, request) 

File "/home/sayantan/Desktop/djangowork/my_env/lib/python3.4/site- packages/django/core/handlers/base.py" in get_response 
    147.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "/home/sayantan/Desktop/djangowork/invoice/invoice/views.py" in RegisterView 
    55.   Client.save() 

Exception Type: TypeError at /register/ 
Exception Value: save() missing 1 required positional argument: 'self' 

Fordern Sie mich bitte freundlich zu helfen, wenn möglich.

+0

Könnte ich bitte fragen Sie eine Antwort (wie Sie here und here sehen kann), vielleicht können wir diskutieren und lösen, bcoz seine kindaa dringend !!! – Sayantan

Antwort

0

Das wohl passiert, weil Sie Ihre Kunde Modell auf Ihrem Client Variable Instanziierung sondern die Instanz der Klasse zu verwenden, Sie werden die Daten direkt an die Klasse zuweisen. Sie sollten speichern() Ihr Objekt und nicht die Klasse selbst

def RegisterView(request): 
    if request.method == 'POST': 
    response_data = {} 
    domain = request.POST.get('domain') 
    schema = request.POST.get('schema') 
    name = request.POST.get('name') 
    description = request.POST.get('description') 

    client=Client() 
    client.domain_url=domain 
    client.schema_name=schema 
    client.name=name 
    client.description=description 
    client.save() 
+0

ohhh yesss !!!!! So ein dummer Fehler !!!! jaaa .... Muss sein !!! Thanxx Filipe – Sayantan

+0

@SGangs Froh zu helfen Bitte akzeptieren Sie die Antwort, wenn geholfen :) –

+0

Hey Fil !!!! Ich habe es gemacht!!! Tut mir wirklich leid, Bruder ... Ich war auf Reisen und hatte eine schlechte Netzwerkverbindung !!! Aber thnxxx wieder Mann – Sayantan

Verwandte Themen