2017-08-14 35 views
0

继从我的最后post的建议,我能走到今天:django如何正确模拟此表?

Post模型:

class Post(models.Model): 
    title = models.CharField(max_length=120) 
    content = models.TextField() 

组型号:

class Group(models.Model): 
    title = models.CharField(max_length=200) 
    url = models.URLField(unique=True) 
    contact_updated = models.DateField(auto_now=False, auto_now_add=True) 
    group_status = models.CharField(max_length=20) 
    admin = models.CharField(max_length=20) 
    admin_status = models.CharField(max_length=20) 
    frequency = models.IntegerField() # allowed post frequency 
    frq_scale = models.CharField(max_length=20, blank=True) 
    obs = models.TextField(blank=True) 

    posts = models.ManyToManyField(Post, through='control.Control') 

控制模式:

class Control(models.Model): 
    published = models.DateField(auto_now=False, auto_now_add=False) 

    post = models.ForeignKey('posts.Post', on_delete=models.CASCADE) 
    group = models.ForeignKey('groups.Group', on_delete=models.CASCADE) 

这是控制组中的帖子。我可以在Control模型的许多组中发布1篇文章。

修正: 有可能在许多组发表一个帖子。

如何生成表格(上面的链接)与这些模型?或者也许我需要改变一些东西?

The table I want to produce

+0

你不需要控制模型。只需将发布的属性添加到Post模型中,您就可以开始 –

+0

我做了一个更正。一篇文章可以分几组发布,这就是为什么我需要Control模型。 –

+0

@RenanBiegelmeyer是'published'字段的日期或关系的日期? –

回答

0

我结束了创建视图中的字典传递到模板。 我没有改变模型。

这是视图:

def control_list(request): 
group_status = STATUS_LIST 
group_query_idx = 1 
period_initial = date.today()-timedelta(days=30) 
period_final = date.today() 

if request.method == "POST": 
    filter_form = FilterControl(request.POST) 
    if filter_form.is_valid(): 
     group_query_idx = int(filter_form.cleaned_data['group_status']) 
     period_initial = filter_form.cleaned_data['period_initial'] 
     period_final = filter_form.cleaned_data['period_final'] 

else: 
    filter_form = FilterControl() 

if group_query_idx: 
    filtered_groups = Group.objects.filter_by_status(group_status[group_query_idx]) 

queryset_list = Control.objects.filter_by_group_status(group_status[group_query_idx])\ 
    .filter(published__range=[period_initial, period_final]) 

query = request.GET.get("q") 
if query: 
    queryset_list = queryset_list.filter(
     Q(post__content__icontains=query) | 
     Q(post__title__icontains=query) | 
     Q(group__title__icontains=query) | 
     Q(group__admin__icontains=query) | 
     Q(group__obs__icontains=query) 
    ).distinct() # avoid duplicated items 

controls_per_group = {} 
for group in filtered_groups: 
    control = queryset_list.filter(group_id=group.id) 
    controls_per_group[group.title] = control 

context = { 
    "object_list": queryset, 
    "title": "Control", 
    "controls_per_group": controls_per_group, 
    "column": range(10), 
    "group_status": group_status, 
    "filter_form": filter_form, 
} 
return render(request, "control_list.html", context) 

这是模板:

<table class="table table-hover table-striped"> 
<thead class="thead-inverse"> 
<tr> 
    <th class="text-center">Action</th> 
    <th class="text-center">Group</th> 
    {% for value in column %} 
    <th class="text-center">#</th> 
    {% endfor %} 
</tr> 
</thead> 

{% for key, value in controls_per_group.items %} 
    <tr> 
    <td class="text-center"><a class='btn btn-info btn-xs disabled' href="#"><i class="fa fa-pencil"></i></a> 
     <a href="#" class="btn btn-danger btn-xs disabled"><i class="fa fa-trash-o"></i></a></td> 
    <th class="text-center">{{ key }}</th> 
    {% for control in value %} 
     <th class="text-center"><a href="{{ control.post.get_absolute_url }}">{{ control.published | date:"d/m/y" }}<br>{{ control.post.id }}</a></th> 
    {% endfor %} 
    </tr> 
{% endfor %} 

0
class Control(models.Model): 
    published = models.DateField(auto_now=False, auto_now_add=False) 

    post = models.ForeignKey('posts.Post', on_delete=models.CASCADE) 
    group = models.ForeignKey('groups.Group', on_delete=models.CASCADE) 

    class Meta: 
     unique_together = (post, group)