2017-05-19 4 views
0

Ich habe ein Modell mit dem Namen Firma:Was ist die beste Möglichkeit, verwandte Modell in Django Admin zu speichern?

class Company(TimeStampedModel): 
    company_id = models.CharField(max_length=20, unique=True) 
    legal_name = models.CharField(max_length=200) 
    trading_name = models.CharField(max_length=200, unique=True) 

    # address 
    address = models.CharField(max_length=200, null=True, blank=True) 
    city = models.CharField(max_length=200, null=True, blank=True) 
    state = models.CharField(max_length=200, null=True, blank=True) 
    zipcode = models.CharField(max_length=200, null=True, blank=True) 

    # contact details 
    email = models.EmailField(max_length=200, null=True, blank=True) 
    phone = models.CharField(max_length=200, null=True, blank=True) 

Und anderes Modell ist CompanyAttributes:

class CompanyAttributes(TimeStampedModel): 
""" All attributes of company""" 

    corporate = models.ForeignKey(Company) 
    key = models.CharField(max_length=100) 
    value = models.TextField(max_length=100) 

Für eine bestimmte Firma, die ich viele Attribute wie Rechnungsadresse, CIN, GSTIN, Kontonummer ich haben kann alle Felder in einem einzigen Formular angezeigt, indem alle Felder als Formularfelder definiert wurden, jetzt möchte ich alle in einem Schritt speichern. Eine Möglichkeit besteht darin, das save_model von ModelAdmin zu überschreiben und jedes Attribut einzeln zu speichern. Gibt es einen Weg mit save_related oder eine andere Methode, so dass ich alles auf einmal speichern kann.

Mein Modell

class CompanyModelForm(ModelForm): 
    pan_number = CharField() 
    cin_number = CharField() 
    gstin_number = CharField() 
    account_number = CharField() 

    def __init__(self, *args, **kwargs): 
     super(CorporateModelForm, self).__init__(*args, **kwargs) 
     self.fields['zipcode'].required = True 
     self.fields['email'].required = True 
     self.fields['phone'].required = True 
     self.fields['cin_number'].required = True 
     self.fields['gstin_number'].required = True 

     obj = kwargs.get('instance') 
     if obj: 
      self.fields['email'].widget.attrs['disabled'] = 'disabled' 

class CompanyAdmin(admin.ModelAdmin): 
    form = CompanyModelForm 
    search_fields = ['company_id', 'legal_name', 'trading_name', 'address','city', 'state', 'zipcode', 'email', 'phone'] 
    list_display = ['id', 'legal_name', 'trading_name', 'address', 'city', 'state', 'zipcode', 'email', 'phone'] 
    readonly_fields = [] 

Antwort

1

Werfen Sie einen Blick auf InlineModelAdmin objects

Dieses es für Sie tun.

class CompanyAttributesInline(admin.StackedInline): 
    model = CompanyAttributes 

class CompanyAdmin(admin.ModelAdmin): 
    ... 
    inlines = (CompanyAttributesInline,) 
Verwandte Themen