sat*_*ace 5 python django foreign-keys limit-choices-to manytomanyfield
我有几个django模型看起来像这样:
from django.contrib.sites.models import Site
class Photo(models.Model):
title = models.CharField(max_length=100)
site = models.ForeignKey(Site)
file = models.ImageField(upload_to=get_site_profile_path)
def __unicode__(self):
return self.title
class Gallery(models.Model):
name = models.CharField(max_length=40)
site = models.ForeignKey(Site)
photos = models.ManyToManyField(Photo, limit_choices_to = {'site':name} )
def __unicode__(self):
return self.name
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用Gallery模型的各种乐趣limit_choices_to.我只希望管理员显示与此图库属于同一网站的照片的选项.这可能吗?
是的。您需要覆盖管理员用于Gallery模型的表单,然后限制该photos表单中字段的查询集:
class GalleryAdminForm(django.forms.ModelForm):
class Meta:
model = Gallery
def __init__(self, *args, **kwargs):
super(GalleryAdminForm, self).__init__(*args, **kwargs)
self.fields['segments'].queryset = Photo.objects.filter(site=self.instance.site)
class GalleryAdmin(django.contrib.admin.ModelAdmin):
form = GalleryAdminForm
django.contrib.admin.site.register(Gallery, GalleryAdmin)
Run Code Online (Sandbox Code Playgroud)
我会删除模型site上的字段Photo并添加ForeignKey到Gallery. 我会limit_choices_to从模型photos上的字段中删除Gallery。
因为您使用的是ForeignKeys 到Sites,这意味着站点不会共享图库和照片。因此,有了我上面提到的那些已经没有用了。
class Photo(models.Model):
title = models.CharField(max_length=100)
gallery = models.ForeignKey(Gallery, related_name='photos')
file = models.ImageField(upload_to=get_site_profile_path)
def __unicode__(self):
return self.title
class Gallery(models.Model):
name = models.CharField(max_length=40)
site = models.ForeignKey(Site)
def __unicode__(self):
return self.name
Run Code Online (Sandbox Code Playgroud)
site一旦您在图库上设置了 ,它的所有照片都将继承此属性。该网站将通过以下方式访问photo_instance.gallery.site:
@property
def site(self):
return self.gallery.site
Run Code Online (Sandbox Code Playgroud)
这应该像你有一个site字段一样工作。但我还没有测试过。
如果您决定画廊或照片可以出现在多个站点中,事情就会发生变化或发展。
| 归档时间: |
|
| 查看次数: |
4432 次 |
| 最近记录: |