私は、企業を表すモデル「リスト」と、企業に割り当てることができるさまざまなプロジェクトを表す別のモデル「リード」を持っています。会社は多くのリードに割り当てることができ、多くのリードは他の多くの会社に関連付けることができるため、それらは多対多の関係を介して関連付けられます。モデルを以下に示します。
見込み客は、リスト管理ページにインライン要素として表示されます。また、オブジェクトのリード編集ページへのリンクを直接表示するために使用されるスニペットもあります。これは逆 URL を介して行われます。
問題は、object.id 引数がリード ID に対応するのではなく、他の番号に対応するのに常に間違っていることです。
上の画像では、リード ルックアップ ID は「53」と表示されていますが、実際には 78 です。
#admin.py
def url_to_edit_object(self,object):
#info = (object._meta.app_label, object._meta.module_name)
admin_url = reverse('admin:dirapp_lead_change', args=(object.id,))
return u'<a href="%s">Edit</a>' %(admin_url)
リードモデル:
class lead(models.Model):
slug = models.SlugField(unique=True,blank=True, null=True)
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100, blank=True, null=True)
business_name = models.CharField(max_length=100,blank=True, null=True)
email = models.EmailField(max_length=75, blank=True, null=True)
phone_number = models.CharField(max_length=20, blank=True, null=True)
address = models.CharField(max_length=150, blank=True, null=True)
city = models.CharField(max_length=50, blank=True, null=True)
state = models.CharField(max_length=10, blank=True, null=True)
zipcode = models.CharField(max_length=5, blank=True, null=True)
submission_date = models.DateTimeField(auto_now_add=True, blank=True)
assigned_to = models.ManyToManyField(Listing,blank=True, null=True, related_name="leads")
requested_software = models.CharField(max_length=50, blank=True, null=True)
number_of_pos = models.CharField(max_length=2, choices=NO_OF_POS, default='1')
type_of_business = models.CharField(max_length=30, choices=TYPE_OF_BUSINESS, default='Bar NightClub', blank=True, null=True)
time_frame = models.CharField(max_length=10, choices=TIME_FRAME, default='1')
comments = models.TextField(blank=True, null=True)
def __unicode__(self):
return self.business_name
@models.permalink
def get_absolute_url(self):
return ('listing_detail', (),
{
'slug' :self.slug,
})
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.business_name)
super(lead, self).save(*args, **kwargs)
リスト モデル:
class Listing(models.Model):
"""
Base model for listings
"""
STATUS_CHOICES = (
('A', 'Active'),
('P', 'Pending'),
)
status = models.CharField(max_length=1, choices=STATUS_CHOICES, default='P')
slug = models.SlugField(unique=True,blank=True, null=True)
submitted_by = models.ManyToManyField(User, blank=True, null=True, related_name="associates")
title = models.CharField(max_length=120, blank=True, null=True)
point = models.PointField(geography=True,srid=settings.SRID, blank=True, null=True)
point2 = models.CharField(max_length=120, blank=True, null=True)
address = models.CharField(max_length=120, blank=True, null=True)
city = models.CharField(max_length=60, blank=True, null=True)
state = models.CharField(max_length=60, blank=True, null=True)
zipcode = models.CharField(max_length=5, blank=True, null=True)
industry = models.ManyToManyField(indCat, related_name="category", blank=True, null=True)
description = models.TextField(blank=True, null=True)
objects = models.GeoManager()
tags = TaggableManager(blank=True)
search = SphinxSearch()
def __unicode__(self):
#return "%s %s %s"%(self.title, self.point.x, self.point.y)
return "%s"%(self.title)
@models.permalink
def get_absolute_url(self):
return ('listing_detail', (),
{
'slug' :self.slug,
})
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title)
if not self.point:
location = "%s+%s+%s+%s"%(self.address, self.city, self.state, self.zipcode)
cord = get_lat_long(location)
#x,y = cord.split(",")
lat = float(cord[0])
lng = float(cord[1])
#x = float(lat)
#y = float(lng)
self.point = Point(lng,lat)
self.point2 = Point(lng,lat)
super(Listing, self).save(*args, **kwargs)
Dirapp admin.py:
class ListingImageInline(admin.StackedInline):
model = ListingImage
class AssignedLeads(admin.TabularInline):
model = lead.assigned_to.through
extra = 0
#list_select_related = True
def url_to_edit_object(self,object):
#info = (object._meta.app_label, object._meta.module_name)
admin_url = reverse('admin:dirapp_lead_change', args=(object.id,))
return u'<a href="%s">Edit</a>' %(admin_url)
url_to_edit_object.allow_tags = True
list_display = ('business_name','url_to_edit_object',)
readonly_fields = ('url_to_edit_object',)
class leadAdmin(admin.ModelAdmin):
list_editable = ('city', 'state')
list_display = ('business_name','first_name','last_name','city','state','submission_date')
list_filter = ('city', 'state','submission_date', 'assigned_to')
inlines = [leadUpdateInline]
filter_horizontal = ('assigned_to',)
class ListingAdmin(admin.ModelAdmin):
prepopulated_fields = {"slug":("title",)}
inlines = [leadUpdateInline,ListingImageInline, AssignedLeads]
filter_horizontal = ('submitted_by',)
class Media:
js = (settings.STATIC_URL+'tinymce/jscripts/tiny_mce/tiny_mce.js',
settings.STATIC_URL+"filebrowser/js/TinyMCEAdmin.js",
settings.STATIC_URL+"tinymce/jscripts/tiny_mce/tinymce_setup.js")
class EmailReminderAdmin(admin.ModelAdmin):
list_filter = ('lead', 'company','email_date_time')
admin.site.register(lead,leadAdmin)
admin.site.register(Listing,ListingAdmin)
admin.site.register(indCat)
admin.site.register(email_reminder, EmailReminderAdmin)