2013-09-06 2 views
-1

Я написал собственный способ сохранения в моем Django model class link. Я добавил этот метод, чтобы, если я использую панель администратора для ввода данных, он будет выполнен, и мне не нужно вводить данные вручную для этого поля, но теперь, когда я ввожу данные с панели администратора, он все еще просит меня ввести данные но затем он просто переопределяет мою запись. Иначе они не позволят ввести это значение с панели администратора.Пользовательский метод сохранения в Django

import uuid 
import base64 
import datetime 
from django.db import models 
from django.contrib import admin 
#------------------------------------------------------------------------------ 

def _generateShortUrl(): 
    """ 
     This function will generate base64 encoded id 
    """ 
    return base64.urlsafe_b64encode(uuid.uuid1().bytes)[:6] 


class link(models.Model): 
    """ 
     This is a link class 
    """ 
    link = models.URLField()         # To store user entered URL 
    hits = models.IntegerField(default=0)      # How many hits for particular URL 
    last_used = models.DateTimeField(auto_now=True)    # When URL is last used 
    short_url = models.CharField(max_length=6,unique=True)  # base64 URL encoded id 

    def linkValidate(self): 
     timediff = datetime.datetime.now() - self.last_used      
     return timediff.min 

    def save(self, *args, **kwargs): 
     """ 
      Custom Save method for link model 
     """ 
     self.short_url = _generateShortUrl()   
     super(link, self).save(*args, **kwargs) 


class user_info(models.Model): 
    """ 
     This is a user_info class 
    """ 
    user_agent = models.TextField()     # Stores user_agent name used by user 
    user_ip = models.ManyToManyField(link)   # Stores user's IP 

    def userIP(self): 
     """Method to return tags related to store""" 
     return ','.join([t.link for t in self.link.all()]) 

#------------------------------------------------------------------------------ 

class linkAdmin(admin.ModelAdmin): 
    """ 
     link admin class 
    """ 
    list_display = ('link','hits','short_url','last_used', 
        'linkValidate') 
    ordering = ('hits',) 

class userInfoAdmin(admin.ModelAdmin): 
    """ 
     user_info admin class 
    """ 
    list_display = ('user_agent','userIP') 

#------------------------------------------------------------------------------ 
admin.site.register(link,linkAdmin) 
admin.site.register(user_info,userInfoAdmin) 

ответ

0

Вы должны попытаться присвоить значение shortURL, когда экземпляр создан, а не тогда, когда он хранится.

1

Вы можете изменить ваше определение поля для:

short_url = models.CharField(max_length=6,unique=True, default=_generateShortUrl) 

или изменения вы linkAdmin добавления:

exclude = ('short_url',)