Django object.id не соответствует объектам, используемым в обратном URL-адресе

У меня есть модель "Листинг", которая представляет компании, а также другую модель "свинца", которая представляет собой различные проекты, которые могут быть назначены компаниям. Они связаны между собой многими отношениями, так как компания может быть назначена для многих потенциальных клиентов, а многие лидеры могут быть связаны со многими другими компаниями. Модели приведены ниже.

Ведущие отображаются на странице администрирования списка как встроенные элементы. Также есть фрагмент, используемый для отображения ссылки непосредственно на странице редактирования руководства объекта, которая выполняется с помощью обратного URL-адреса.

Проблема заключается в том, что аргумент object.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" target="_blank">Edit</a>' %(admin_url)

МОДЕЛЬ LEAD:

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" target="_blank">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)
1 ответ

В вашем методе url_to_edit_object object не является экземпляром Lead - это экземпляр промежуточной модели, в которой хранятся многие и многие данные.

object.lead_id этого используйте object.lead_id.

licensed under cc by-sa 3.0 with attribution.